程式 Call Google Trends 要記得設定 PREF 這個 cookie哦!
同事透過 WebRequest 要取得 Google Trends 的相關資料,結果卻發生「Google 搜尋趨勢 - 偵測到錯誤」的錯誤訊息,
static void Main(string[] args)
{
string _address = @"http://www.google.com/trends/fetchComponent?q=就業,失業&cid=TIMESERIES_GRAPH_0&export=3";
WebRequest request = WebRequest.Create(_address);
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string m_SurvePattern = reader.ReadToEnd();
Console.WriteLine(m_SurvePattern);
Console.ReadKey();
}
但是如果從網頁上直接輸入,卻是沒有問題的!
像這種問題,就需要請 Fiddler 出馬了!
錄一下Browser的行為是不是有多送一些東西給 Server,如下,
然後直接在 Fiddler 的 Composer 裡測看看那些是一定要留下來的,
結果發現 PREF 這個 cookie 一定是需要的。
相關資訊可參考「Google 使用的 Cookie 類型」。
所以在 Request 時,多加入 PREF 這個 cookie ,目前看來就可以正常取得資料,如下,
static void Main(string[] args)
{
string _address = @"http://www.google.com/trends/fetchComponent?q=就業,失業&cid=TIMESERIES_GRAPH_0&export=3";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_address);
request.Credentials = CredentialCache.DefaultCredentials;
request.CookieContainer = new CookieContainer();
Cookie pref = new Cookie("PREF", "LM=1421898798");
pref.Domain = ".google.com";
request.CookieContainer.Add(pref);
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string m_SurvePattern = reader.ReadToEnd();
Console.WriteLine(m_SurvePattern);
Console.ReadKey();
}
如果有更好的做法,請讓我知道,謝謝哦!
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^