[.NET]Call Google Trends 回傳「偵測到錯誤」

程式 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();
}

image

 

但是如果從網頁上直接輸入,卻是沒有問題的!

image

 

像這種問題,就需要請 Fiddler 出馬了!

錄一下Browser的行為是不是有多送一些東西給 Server,如下,

image

 

然後直接在 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();
}

image

 

如果有更好的做法,請讓我知道,謝謝哦!

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^