微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何生成 x aomunt 的 Google 图片搜索结果,并在 PictureBoxes 上显示前 9 个图片结果

如何解决如何生成 x aomunt 的 Google 图片搜索结果,并在 PictureBoxes 上显示前 9 个图片结果

简而言之,我需要弄清楚如何使用 Google Api 进行基于名为“Title”的 RichBox 中的文本和另一个名为“Body”的 RichBox 中的粗体字的 Google 图像搜索。这样做的想法是创建一个图像建议页面,用于帮助制作 PowerPoint 幻灯片

这是我尝试进行 Google 图片搜索代码

对于开始,我们有两个名为“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 个搜索图像。

我们有一个名为 GetHTMLCode() 的函数

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;
        } 

接下来我们有 Getimage() 函数

 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?