I'm trying to build a web application that uses data off of google trends and/or google insight, but I've run into a bit开发者_如何转开发 of a road block. Google Trends only lets you download the csv file if you are logged in on a valid google account. Thus, I can't have my web application download and parse them.
Which lead me to start looking into OAuth http://code.google.com/apis/accounts/docs/OAuth.html, but I'm a bit overwhelmed.
Trying to use google trends url with http://googlecodesamples.com/oauth_playground/ generates an invalid scope error for the google trends url.
Can I not use Oauth to access these services? I've done a bunch of searching, but haven't found any really solid examples(at least ones that I can understand) of how to properly use this. Is there a better way to do this?
Anyone help me out on this?
As of 4/30/2013 this works. Note that you hit their quota pretty fast doing this method.
static void Main(string[] args)
{
using (var client = new WebClient())
{
var terms = new List<string>() {"debt", "profit", "euro", "dollar", "financial", "economy", "federal reserve", "earnings", "fed", "consumer spending" , "employment", "unemployment", "jobs" };
var username = "your username";
var password = "password";
var response = client.DownloadString(string.Format("https://www.google.com/accounts/ClientLogin?accountType=GOOGLE&Email={0}&Passwd={1}&service=trendspro&source=test-test-v1", username, password));
// The SID is the first line in the response
// The Auth line
var auth = response.Split('\n')[2];
client.Headers.Add("Authorization", "GoogleLogin " + auth);
int i = 1;
while (terms.Count > 0)
{
// google limits 5 sets of terms per request
var arr = terms.Take(5).ToArray();
terms = terms.Skip(5).ToList();
var joined = string.Join("%2C%20", arr);
byte[] csv = client.DownloadData(string.Format("http://www.google.com/trends/trendsReport?hl=en-US&q={0}&cmpt=q&content=1&export=1", joined));
// TODO: do something with the downloaded csv file:
Console.WriteLine(Encoding.UTF8.GetString(csv));
File.WriteAllBytes(string.Format("report{0}.csv", i), csv);
i++;
}
}
}
I'm trying to achieve the same task in a different coding language.
In the line: client.Headers.Add("Authorization", "GoogleLogin " + auth); does the "+" sign simply concatenate the two strings "GoogleLogin " and "Auth=*****" ?
Looks like the authorisation method has changed again in the last couple of months if my implementation is correct :(
精彩评论