无法使用HttpClient访问Google趋势

时间:2012-10-28 20:42:12

标签: httpclient apache-httpclient-4.x google-api-java-client

我对此有点新手......基本上我需要运行一个脚本来从谷歌趋势下载.csv文件。我根据这个reference编写了以下代码,代码如下:

     HttpClient client = new DefaultHttpClient();
     HttpPost post = new HttpPost("https://www.google.com/accounts/ClientLogin");

     try {

         List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>;
         nameValuePairs.add(new BasicNameValuePair("Email", "myEmail"));
         nameValuePairs
                 .add(new BasicNameValuePair("Passwd", "myPasswd"));
         nameValuePairs.add(new BasicNameValuePair("accountType", "GOOGLE"));
         nameValuePairs.add(new BasicNameValuePair("source",
                 "Google-cURL-Example"));
         nameValuePairs.add(new BasicNameValuePair("service", "xapi"));

         post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
         HttpResponse response = client.execute(post);
         BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

         String line = "";
         while ((line = rd.readLine()) != null) {
             System.out.println(line);
             if (line.startsWith("SID=")) {
                 String key = line.substring(4);
                 // Do something with the key
         } catch (Exception e) {
                    }

我获得了有关SID,LSID,Auth的信息,但不知道如何使用这些信息。我想我应该在以下请求中添加这些cookie,但不知道具体如何。我写了另一段代码来连接到某个网址,但我不断收到此消息“您必须登录才能从Google趋势中导出数据。”如果有帮助,代码就在这里:

 URL url = new URL(myUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setInstanceFollowRedirects(true);
        conn.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.addRequestProperty("Authorization", "SID"+key);
        conn.addRequestProperty("Email", "myEmail");
        conn.addRequestProperty("Passwd", "myPasswd");
        conn.setReadTimeout(5000);
        conn.connect();

我四处搜索,发现一些有用的信息,有人可以提供帮助吗?

2 个答案:

答案 0 :(得分:0)

是否必须使用Java?在python中,它就像这样简单:

from pyGTrends import pyGTrends

connector = pyGTrends('google username','google password')
connector.download_report(('keyword1', 'keyword2'))
print connector.csv()

您需要google trends api library

如果必须是Java,您可能需要查看Apache的HttpClient examples。 “基于表单的登录”和“客户端身份验证”可能都是相关的。

答案 1 :(得分:0)

我刚刚编写了这个代码:

https://github.com/elibus/j-google-trends-api

这是Google Trends API的非官方Java实现。您可以使用它轻松访问Google趋势,或者您可能希望查看代码以查看其有效。

无论如何,身份验证流程的工作原理如下(所有步骤都是必需的):

  1. 抓取https://accounts.google.com/ServiceLoginAuth并解析GALX ID
  2. 发布用户名/密码+ GALX
  3. 获取http://www.google.com
  4. 然后,您可以通过宽松的QoS政策为经过身份验证的用户访问Google趋势。