如何解决如何生成 x aomunt 的 Google 图片搜索结果,并在 PictureBoxes 上显示前 9 个图片结果
简而言之,我需要弄清楚如何使用 Google Api 进行基于名为“Title”的 RichBox 中的文本和另一个名为“Body”的 RichBox 中的粗体字的 Google 图像搜索。这样做的想法是创建一个图像建议页面,用于帮助制作 PowerPoint 幻灯片。
对于开始,我们有两个名为“Title”和“Body”的 RichBox。
无论用户在“标题”框中键入什么,它都会存储在“搜索词”字符串列表中
private void TitleTextBox2_TextChanged(object sender,EventArgs e)
{
_searchTerms.Add(textBox2.Text.ToString());
}
我们对“Body”丰富框使用相同的方法,并添加一个 if 语句检查以查看 BOLD 布尔值是真还是假,如果 Bold 为真,则我们将当前文本更改为“搜索”列表条款”字符串。
private void BodyTextBox_TextChanged_1(object sender,EventArgs e)
{
if (ControllerSlide.bold == true)
{
this.richTextBox1.Select();
this.richTextBox1.SelectionFont = new Font(richTextBox1.Font,System.Drawing.FontStyle.Bold);
_searchTerms.Add(richTextBox1.Text.ToString());
}
else
{
this.richTextBox1.Select();
this.richTextBox1.SelectionFont = new Font(richTextBox1.Font,System.Drawing.FontStyle.Regular);
}
}
现在我们有了一个搜索词列表,这是我遇到的棘手部分。我有一个名为“生成”的按钮,它将调用实现搜索词列表的函数,并使用它生成 9 个搜索图像。
private string GetHtmlCode()
{
var rnd = new Random();
int topic = rnd.Next(0,_searchTerms.Count - 1);
string url = "https://www.google.com/search?q=" + _searchTerms[topic] + "&tbm=isch";
string data = "";
var request = (HttpWebRequest)WebRequest.Create(url);
var response = (HttpWebResponse)request.GetResponse();
using (Stream dataStream = response.GetResponseStream())
{
if (dataStream == null)
return "";
using (var sr = new StreamReader(dataStream))
{
data = sr.ReadToEnd();
}
}
return data;
}
这假设生成一个随机索引计数,以便在 _searchTerms 列表中选择并返回数据。
接下来我们有函数 GetURLs
private List<string> GetUrls(string html)
{
var urls = new List<string>();
string search = @",""ou"":""(.*?)"",";
MatchCollection matches = Regex.Matches(html,search);
foreach (Match match in matches)
{
urls.Add(match.Groups[1].Value);
}
return urls;
}
private byte[] Getimage(string url)
{
var request = (HttpWebRequest)WebRequest.Create(url);
var response = (HttpWebResponse)request.GetResponse();
using (Stream dataStream = response.GetResponseStream())
{
if (dataStream == null)
return null;
using (var sr = new BinaryReader(dataStream))
{
byte[] bytes = sr.ReadBytes(100000000);
return bytes;
}
}
return null;
}
这会抓取图像并将它们存储在字节数据中
最后将它们联系在一起的是“GenerateButtonClick”函数
private void GenerateButton_Click(object sender,EventArgs e)
{
var client = new GwebSearchClient("https://www.google.com/search?q="
+ _searchTerms + "&tbm=isch");
var results = client.Search("google",9);
foreach (var webResult in results)
{
Console.WriteLine("{0},{1},{2}",webResult.Title,webResult.Url,webResult.Content);
listView1.Items.Add(webResult.ToString());
}
if(_searchTerms.Count <= 0)
{
System.Windows.MessageBox.Show("Please add Title or Body text" );
return;
}
else
{
string html = GetHtmlCode();
List<string> urls = GetUrls(html);
var rnd = new Random();
if(urls.Count <= 0)
{
System.Windows.MessageBox.Show("URLs Count is zero" +
urls.Count.ToString()); return;
}
else
{
int randomUrl = rnd.Next(0,urls.Count);
string luckyUrl = urls[0];
byte[] image = Getimage(luckyUrl);
using (var ms = new MemoryStream(image))
{
pictureBox1.Image = Image.FromStream(ms);
}
}
}
imageResultsPage = new ImageResultsPage();
imageResultsPage.Show();
}
现在我的问题是我的 url.Count 总是等于 0。我无法弄清楚这个问题。
此外,如果有更好的方法来生成 Google 图片搜索并将前 9 张图片显示在表单的 9 个图片框中,我愿意更改任何代码或完全更改结构。
我使用的是 Visual Studios 2019 c#.net
附注。我对这一切都很陌生。感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。