通过 Powershell 获取 Google 搜索结果

nix*_*xda 1 powershell windows-7 powershell-4.0

假设您只有音乐文件中的艺术家标题,但不知道专辑名称。

当您在 Chrome 中使用Google 搜索 ieGolden Earring Radar Love Album时,您会得到:

在此输入图像描述

您可以看到专辑名称(Moontan)、发行日期(1973 年 7 月)甚至正确的专辑封面。该页面部分如何命名?谷歌预览?谷歌即时页面?我不知道

我的问题是

如何通过 PowerShell 以编程方式获取这些信息?

我尝试过的

  1. Invoke-Webrequest:不起作用,特定内容未响应

    $Response = Invoke-WebRequest -URI "https://www.google.com/search?hl=en&q=Golden+Earring+Radar+Love+Album"
    $Response.content | Set-Content D:\test.txt
    
    Run Code Online (Sandbox Code Playgroud)
  2. XmlHttpRequest:不起作用,特定内容未响应

    $objXmlHttp = New-Object -ComObject MSXML2.ServerXMLHTTP
    $objXmlHttp.Open("GET", "https://www.google.com/search?hl=en&q=Golden+Earring+Radar+Love+Album")
    $objXmlHttp.Send()
    $objXmlHttp.responseText | Set-Content D:\test.txt
    
    Run Code Online (Sandbox Code Playgroud)
  3. Invoke-RestMethod:不起作用,仅检索 URL 及其片段

    $Response = Invoke-RestMethod -Uri 'https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Golden%20Earring%20Radar%20Love%20Album'
    $Response.responseData.results
    
    Run Code Online (Sandbox Code Playgroud)
  4. 我寻找可以在 PowerShell 中使用的Google Play 或 Google Music API

我认为问题在于,这些信息是通过 Javascript 加载的,而在使用Invoke-WebRequest等方法时,Javascript 不会执行这些信息。我在这里可能是错的。

我看到两种解决方案:1)在 PowerShell 中模仿 Web 浏览器并将整个网站加载到表单中。或者 2)使用 fiddler 查看这些额外信息的加载时间和方式。我更喜欢第二种解决方案,但这两种解决方案都超出了我的知识范围。


背景以避免评论说还有其他服务(例如 XYZ)更适合您的需求

我已经有了工作 PowerShell 脚本,仅获取给定艺术家的专辑名称和附加信息以及众多服务的曲目标题,包括Amazon、Deezer、Discogs、EchoNest、iTunes、Last.fm、MusicBrainz、Napster、rdio 和 Spotify。因为他们都提供了易于使用的 API(亚马逊除外。他们的实现相当困难)。

我对大约 3000 个音乐文件进行了一些测试,仅给出艺术家和曲目标题,以检索相应的专辑名称。当我将结果与谷歌进行比较时,我发现上述服务都没有谷歌那么准确。

pav*_*taj 6

  • 打开powershell配置文件ii $profile
  • 将以下代码片段粘贴到配置文件中
Function search-google {
        $query = 'https://www.google.com/search?q='
        $args | % { $query = $query + "$_+" }
        $url = $query.Substring(0, $query.Length - 1)
        start "$url"
}

Set-Alias glg search-google
Run Code Online (Sandbox Code Playgroud)
  • 重新启动 powershell 会话
  • 从控制台运行新命令glg hello world
  • 不需要对字符串加引号