使用脚本语言解析AJAX API的输出相对容易:
#!/usr/bin/env python
import urllib
import json
base = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&'
query = urllib.urlencode({'q' : "something"})
response = urllib.urlopen(base + query).read()
data = json.loads(response)
print data['responseData']['results'][0]['url']
但是有没有更好的方法来做类似的基本shell脚本?如果你只是卷曲了API页面,你应该如何编码URL参数或解析JSON?
答案 0 :(得分:6)
我最终使用curl的--data-urlencode选项对查询参数进行编码,然后使用sed来提取第一个结果。
curl -s --get --data-urlencode "q=example" http://ajax.googleapis.com/ajax/services/search/web?v=1.0 | sed 's/"unescapedUrl":"\([^"]*\).*/\1/;s/.*GwebSearch",//'
答案 1 :(得分:4)
@Lri - 这是我个人用于命令行工具和目的的脚本。脚本。它使用命令行实用程序“lynx”来转储URL。脚本可以从HERE下载,代码视图是HERE。 以下是供您参考的代码,
#!/bin/bash
clear
echo ""
echo ".=========================================================."
echo "| |"
echo "| COMMAND LINE GOOGLE SEARCH |"
echo "| --------------------------------------------------- |"
echo "| |"
echo "| Version: 1.0 |"
echo "| Developed by: Rishi Narang |"
echo "| Blog: www.wtfuzz.com |"
echo "| |"
echo "| Usage: ./gocmd.sh <search strings> |"
echo "| Example: ./gocmd.sh example and test |"
echo "| |"
echo ".=========================================================."
echo ""
if [ -z $1 ]
then
echo "ERROR: No search string supplied."
echo "USAGE: ./gocmd.sh <search srting>"
echo ""
echo -n "Anyways for now, supply the search string here: "
read SEARCH
else
SEARCH=$@
fi
URL="http://google.com/search?hl=en&safe=off&q="
STRING=`echo $SEARCH | sed 's/ /%20/g'`
URI="$URL%22$STRING%22"
lynx -dump $URI > gone.tmp
sed 's/http/\^http/g' gone.tmp | tr -s "^" "\n" | grep http| sed 's/\ .*//g' > gtwo.tmp
rm gone.tmp
sed '/google.com/d' gtwo.tmp > urls
rm gtwo.tmp
echo "SUCCESS: Extracted `wc -l urls` and listed them in '`pwd`/urls' file for reference."
echo ""
cat urls
echo ""
#EOF
答案 2 :(得分:3)
多年后,您可以安装googler
googler -n 1 -c in -l en search something here --json
您可以使用n标志控制输出页面的数量。
要获取网址,只需将其传输到:
即可grep "\"url\""|tr -s ' ' |cut -d ' ' -f3|tr -d "\""
答案 3 :(得分:1)
未经测试的方法,因为我目前无法访问unix框...
假设“test”是查询字符串,您可以在以下网址上使用简单的wget http://www.google.co.in/#hl=en&source=hp&biw=1280&bih=705&q=test&btnI=Google+Search&aq=f&aqi=g10&aql=&oq=test&fp=3cc29334ffc8c2c
这将利用Google的“我感觉很幸运”的功能,为您赢得第一个网址。你也许可以清理一下上面的网址。
答案 4 :(得分:1)
Lri的答案只返回了我的最后一个结果,我需要顶部所以我把它更改为:
JSON=$(curl -s --get --data-urlencode "q=QUERY STRING HERE" http://ajax.googleapis.com/ajax/services/search/web?v=1.0 | python -mjson.tool)
response=$(echo "$JSON" | sed -n -e 's/^.*responseStatus\": //p')
if [ $response -eq 200 ] ; then
url=$(echo "$JSON" | egrep "unescapedUrl" | sed -e '1!d' -e "s/^.*unescapedUrl\": \"//" -e "s/\".*$//")
echo "Success! [$url]"
wget $url;
else
echo "FAILED! [$response]"
fi
它并不像我想的那样紧凑,而是匆忙。
答案 5 :(得分:1)
仅供参考:到2013年11月,您需要完全替换ajax.googleapis.com/ajax/services/search/web
来电。
最有可能的是,它必须替换为自定义搜索引擎(CSE)。问题是你无法从CSE获得“全球”结果。以下是关于如何执行此操作的一个很好的提示:http://groups.google.com/a/googleproductforums.com/d/msg/customsearch/0aoS-bXgnEM/lwlZ6_IyVDQJ。