Google News XML API:使用国家/语言参数



我想订阅来自谷歌新闻的RSS/XML提要,该提要捕获以下查询:

提到"studie"(德语为"学习")的文章,用德语写成,来自任何国家。

我使用的是 https://news.google.com/rss/search,但对于此示例,更容易在 https://news.google.com/search 处看到 UI 输出,因此我将在本示例中使用后一个 URL 库。

现在,在XML API参考中,Google提到了影响语言或国家/地区的四个不同参数:

  • hl(主语言):假定最终用户键入的语言。 也就是说,一个说英语的人输入"study",谷歌假设该术语是英语,然后将结果机器翻译回英语。 对我来说,导航到将重定向带有hl=en-US的 URL(完整的 URL 是 https://news.google.com/?hl=en-US&gl=US&ceid=US:en)。

  • gl:提升原产国与参数值匹配的搜索结果。 我的网络浏览器中的默认值是gl=US

  • lr(语言限制):将搜索结果限制为以特定语言编写的文档

  • cr(国家/地区限制):将搜索结果限制为源自特定国家/地区的文档

基于上述所有内容,这意味着URL为*:

https://news.google.com/search?q=study&hl=en-US&lr=lang_de

然而,这种尝试惨遭失败;它显示了来自美国的英语结果,并且它 302 重定向到:

https://news.google.com/search?q=study&lr=lang_de&hl=en-US&gl=US&ceid=US:en

因此,为此:

  • 如何正确构建网址参数以捕获来自任何国家/地区的"提及"studie"(德语为"学习")的文章,这些文章用德语撰写。
  • 到底是什么ceid,为什么谷歌完全没有记录它?

* 即:

>>> import urllib.parse
>>> urllib.parse.parse_qs('q=study&hl=en-US&lr=lang_de')                                                                                                     
{'q': ['study'], 'hl': ['en-US'], 'lr': ['lang_de']}

相关但未解决任何此问题:

  • 将 Google 新闻 RSS 限制为特定国家/地区
  • RSS 谷歌新闻语言
  • 在使用谷歌新闻 RSS 网址时,如何指定检索本地新闻?

我使用以下 URL,它对我有用:

https://news.google.com/rss?q=studie&hl=de-DE&gl=DE&ceid=DE:de

您也可以在主题中搜索,请参考这个答案:谷歌新闻 RSS 提要的网址格式

我对RSS界面一无所知,但至于标准的新闻UI,也许这可以使用:

ceid(国家:语言)是谷歌的新闻过滤器,所以LR(谷歌新闻似乎忽略了)和cr受到进一步的限制,只筛选新闻过滤器定义的新闻。对于英语的美国新闻,它是ceid=US:en,对于英国的新闻,它是ceid=GB:en。 来源: https://rapidapi.com/apigeek/api/google-search3/details

注意:如果您没有指定ceid,将根据您当前的位置应用一个ceid。此外,谷歌新闻似乎根本不关心 lr 参数:它坚持使用 ceid 的语言,仅此而已。根据您的查询: 提到"studie"(德语为"学习")的文章,用德语写成,来自任何国家,我建议使用 DE:de 的值,但是您可能会发现 ceid 参数在"来自任何国家/地区"方面有些限制,但对此您无能为力。谷歌新闻基于每个地方都有自己的新闻提要的概念,"来自任何国家"听起来很像"来自地球上所有地方的所有新闻",而且没有这样的谷歌新闻。"世界"新闻如您所知并不完全相同。如果您需要对制作/出版国家/地区没有任何限制,那么您最好寻找另一个渠道。在谷歌世界中,在发布文档时适当应用限制的高级谷歌搜索可能是不可能被击败的。

搜索中涉及的其他四个参数是:

hl, host(interface) language: hl=de
gl, boost country of origin: gl=DE
lr, restrict results to language: lr=de
cr, restrict results to country: none

建议的搜索字符串中有两个错误:

https://news.google.com/search?q=study&hl=en-US&lr=lang_de

q=studie, not study, and
lr=de, not lang_de.

然而,谷歌新闻并不关心 lr 参数:它坚持使用 ceid 的语言。此外,hl 始终设置为 ceid 的语言,gl 设置为国家/地区部分,我建议您使用 de:de 的 ceid 进行查询。

因此,DE:de 的搜索字符串变为:

https://news.google.com/search?q=studie&hl=de&gl=DE&ceid=DE:de

另外,为了添加到Sreeram Nair提供的国会图书馆链接中,那里没有给出国家代码。您可以在此处找到国家/地区代码:

• ISO 3166-1 alpha-2(2 个字母的国家)标准, https://en.m.wikipedia.org/wiki/ISO_3166-1_alpha-2

您可能还会发现此文档的语言代码在移动设备上更容易阅读:

• ISO 639-1(语言)代码列表 https://en.m.wikipedia.org/wiki/List_of_ISO_639-1_codes

来源:维基百科文章

• 软件术语"区域设置", https://en.m.wikipedia.org/wiki/Locale_(computer_software)

• ISO 639(语言)标准,https://en.m.wikipedia.org/wiki/ISO_639

Google New RSS 的新网址已更改。您可以使用以下格式进行提取。也可以在这里看到例子。

usage: gnrss2opml.py [-h] [-o OUTPUT] [-c COUNTRY] [-l LANGUAGE] [-s]
[-t [TOPIC [TOPIC ...]]] [-g [LOCATION [LOCATION ...]]]
[-q [QUERY [QUERY ...]]]
optional arguments:
-h, --help            show this help message and exit
-o OUTPUT, --output OUTPUT
output file name (default: print to stdout)
-c COUNTRY, --country COUNTRY
country / Google News edition (default: us)
-l LANGUAGE, --language LANGUAGE
language (default: en)
-s, --stories         include Top Stories
-t [TOPIC [TOPIC ...]], --topics [TOPIC [TOPIC ...]]
list of topics, will be converted to uppercase
(default: WORLD NATION BUSINESS TECHNOLOGY
ENTERTAINMENT SPORTS SCIENCE HEALTH)
-g [LOCATION [LOCATION ...]], --locations [LOCATION [LOCATION ...]]
list of geographic locations (default: None)
-q [QUERY [QUERY ...]], --queries [QUERY [QUERY ...]]
list of search queries (default: None)

编辑1:

可以在参数中指定 2 个字母的语言代码和国家/地区代码。

从这里获取代码

最新更新