维基百科主页上的图片现在以窗口形式显示
本文关键字:窗口 显示 主页 百科 | 更新日期: 2023-09-27 18:26:56
我试图从wikipediaapi中获取第一个图像。我写了以下C#代码来从缩略图中检索源代码。但每当我运行代码时,它都会显示异常
类型为"Newtonsoft.Json.JsonReaderException"的未处理异常
出现在Newtonsoft.Json.dll中。其他信息:意外分析值时遇到字符:<。路径",第0行,位置0。
我的代码如下
public class Thumbnail
{
public string source { get; set; }
public int width { get; set; }
public int height { get; set; }
}
public class Pageval
{
public int pageid { get; set; }
public int ns { get; set; }
public string title { get; set; }
public Thumbnail thumbnail { get; set; }
public string pageimage { get; set; }
}
public class Query
{
public Dictionary<string, Pageval> pages { get; set; }
}
public class RootObject
{
public string batchcomplete { get; set; }
public Query query { get; set; }
}
class Class1
{
public static PictureBox Image1 = new PictureBox();
public static Label Image1_title = new Label();
public static void Load_Image(string name1, string LocationName)
{
var startPath = Application.StartupPath;
string Imagefolder = Path.Combine(startPath, "Image");
string subImageFolder = Path.Combine(Imagefolder, LocationName);
System.IO.Directory.CreateDirectory(subImageFolder);
using (var wc = new System.Net.WebClient())
{
var uri = ("https://en.wikipedia.org/w/api.php?action=query&prop=pageimages&pithumbsize=400&titles="+name1);
var response = wc.DownloadString(new Uri(uri));
var responseJson = JsonConvert.DeserializeObject<RootObject>(response);
var firstKey = responseJson.query.pages.First().Key;
string image1 = responseJson.query.pages[firstKey].thumbnail.source;
string Image_title = responseJson.query.pages[firstKey].title;
Image1.SizeMode = PictureBoxSizeMode.StretchImage;
Image1.LoadAsync(image1);
Image1_title.Text = Image_title;
}
}
}
}
在form1.cs中,我用以下方式来称呼这个类。我在文本框中写下了柏林这样的名字。
private void button1_Click(object sender, EventArgs e)
{
Class1.Image1 = pictureBox1;
Class1.Load_Image(textBox1.Text, textBox1.Text);
}
我没有发现这个代码有什么问题
我得到的json是
{
"batchcomplete": "",
"query": {
"pages": {
"3354": {
"pageid": 3354,
"ns": 0,
"title": "Berlin",
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3b/Siegessaeule_Aussicht_10-13_img4_Tiergarten.jpg/400px-Siegessaeule_Aussicht_10-13_img4_Tiergarten.jpg",
"width": 400,
"height": 267
},
"pageimage": "Siegessaeule_Aussicht_10-13_img4_Tiergarten.jpg"
}
}
}
}
如果您查看查询的输出,它会显示:
这是JSON格式的HTML表示形式。HTML有利于调试,但不适合应用程序使用。
指定format参数以更改输出格式。要查看JSON格式的非HTML表示形式,请设置
format=json
。
如果你遵循这个建议,它应该会纠正你的错误。
要显示URL中的图像,需要使用WebClient
在本地系统中加载图像。
即。
string remoteUri = "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3b/Siegessaeule_Aussicht_10-13_img4_Tiergarten.jpg/400px-Siegessaeule_Aussicht_10-13_img4_Tiergarten.jpg";
string fileName = "MyImage.jpg",
WebClient myWebClient = new WebClient();
myWebClient.DownloadFile(remoteUri,fileName);