2011-12-24 33 views
11

Tôi cố gắng để:Đang cố gắng để đăng nhập vào Google để tải dữ liệu Google Trends

  1. Đăng nhập vào Google
  2. Tải xuống dữ liệu CSV từ Google Trends

Tôi thành công trong (1) nhưng không phải trong (2). Tôi có được trả lại một phép-token từ Google, và đang gửi nó với các yêu cầu tiếp theo để Xu hướng, tuy nhiên Google sau đó trả về một lỗi: "Bạn phải đăng nhập để xuất dữ liệu từ Google Trends":

// http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html 
$data = array(
    'accountType' => 'GOOGLE', 
    'Email'  => '[email protected]', 
    'Passwd'  => 'my.password', 
    'service'  => 'trendspro', 
    'source'  => 'company-application-1.0' 
); 

$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin"); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    curl_setopt($ch, CURLOPT_HTTPAUTH, false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $response = curl_exec($ch); 

    preg_match("/Auth=([a-z0-9_\-]+)/i", $response, $matches); 

    // We now have an authorization-token 
    $headers = array(
    "Authorization: GoogleLogin auth=" . $matches[1], 
    "GData-Version: 3.0" 
); 

    curl_setopt($ch, CURLOPT_URL, "http://www.google.com/trends/viz?q=MSFT&date=2011-2&geo=all&graph=all_csv&sort=0&sa=N"); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_POST, false); 
    $csv = curl_exec($ch); 
curl_close($ch); 

// Returns : "You must be signed in to export data from Google Trends" 
// Expected: CSV data stream 
print_r($csv); 

Vì một số lý do, mã thông báo xác thực tôi gửi tới Google Xu hướng, không được chấp nhận hoặc bị bỏ qua. Tôi không biết chính xác điều gì xảy ra, vì không có thông tin lỗi bổ sung nào được đưa ra.

Có ai nhìn thấy những gì tôi đang làm sai không? Nếu bạn có thể lấy nó để làm việc, có nghĩa là Google đang trở lại các dữ liệu CSV, sau đó tiền thưởng là của bạn và cả hai chúng tôi có một cuối Giáng :-) hiện


Vì vậy, tôi đã tìm ra vấn đề không có gì để làm với cURL. Những gì tôi đã làm là:

SID=DQAAAMUAAADMqt...aYPaYniC_iW 
LSID=DQAAAMcAAACI5...YDTBDt_xZC9 
Auth=DQAAAMgAAABm8...trXgqNv-g0H 
GData-Version: 3.0  
Authorization: GoogleLogin auth=DQAAAMgAAABm8...trXgqNv-g0H 
  • tôi có được trả lại:

tiêu đề:

Date: Tue, 27 Dec 2011 00:17:20 GMT 
Content-Encoding: gzip 
Content-Disposition: filename=trends.csv 
Content-Length: 97 
X-XSS-Protection: 1; mode=block 
Server: Google Trends 
X-Frame-Options: SAMEORIGIN 
Content-Type: text/csv; charset=UTF-8 
Cache-Control: private 

dữ liệu:

You must be signed in to export data from Google Trends 

Nói cách khác, tôi gửi tiêu đề theo quy định của Google trên http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html nhưng không có may mắn nhận được một lợi nhuận thích hợp. Có khoảng * không * thông tin về Interwebs liên quan đến điều này. Ai biết được vấn đề là gì?

+0

Bạn đã kiểm tra tại đây http://stackoverflow.com/questions/4986758/oauth-google-trends-download-csv-file – Pateman

+0

Cảm ơn mẹo. Liên kết của bạn đã đưa tôi đến http://stackoverflow.com/questions/1656446/download-csv-from-google-insight-for-search, nhưng điều này cũng không khắc phục được sự cố. Tôi đang làm chính xác như được giải thích trên đó nhưng không may mắn, và tôi không thể nhìn thấy những gì tôi đang làm sai ... – Pr0no

+0

Không chắc chắn nếu điều này giúp, nhưng một anh chàng đã có một vấn đề với truy cập vào các trang web HTTPS bằng cách sử dụng cURL và vấn đề của mình đã được giải quyết tại đây: http://stackoverflow.com/questions/316099/cant-connect-to-https-site-using-curl-returns-0-length-content-instead-what-c ​​ – Pateman

Trả lời

4

Sau khi kiểm tra mã của bạn, vấn đề là Google Xu hướng cần có khóa SID và không phải Auth. Dưới đây là đoạn code tôi viết cho tải về của

<?php 

header('content-type: text/plain'); 

// Set account login info 
$data['post'] = array(
    'accountType' => 'HOSTED_OR_GOOGLE', // indicates a Google account 
    'Email'  => '', // full email address 
    'Passwd'  => '', 
    'service'  => 'trendspro', // Name of the Google service 
    'source'  => 'codecri.me-example-1.0' // Application's name, e.g. companyName-applicationName-versionID 
); 

$response = xhttp::fetch('https://www.google.com/accounts/ClientLogin', $data); 

// Test if unsuccessful 
if(!$response['successful']) { 
    echo 'response: '; print_r($response); 
    die(); 
} 

// Extract SID 
preg_match('/SID=(.+)/', $response['body'], $matches); 
$sid = $matches[1]; 

// Erase POST variables used on the previous xhttp call 
$data = array(); 

// Set the SID in cookies 
$data['cookies'] = array(
    'SID' => $sid 
); 

này sử dụng xhttp class, một wrapper cURL tôi csv.

+0

Liên kết lớp xhttp của bạn chuyển hướng đến một trang quảng cáo ngẫu nhiên – Jones03

0

Hmm, tôi chưa làm việc với API Google, nhưng muốn truy cập API Google Apps cho dự án sắp tới để bắt đầu đào bới. Tôi đoán là kể từ khi Trends không ở trong the list of services that implement the Google Data Protocol mặc dù bạn đang xác thực chính xác/thành công (được xác minh bằng phần Auth của phản hồi) Google sẽ không tôn trọng mã thông báo xác thực cho Xu hướng (một lần nữa đây là phỏng đoán tốt nhất!). Sau đó, tôi nghĩ rằng bạn sẽ cần phải sử dụng một phương pháp truyền thống để đăng nhập vào Google Xu hướng và tải xuống CSV, có nghĩa là, hoạt động như trình duyệt từ ứng dụng khách của bạn chứ không phải ứng dụng. Không chắc chắn về điều đó, nhưng tôi đã tìm thấy an older python client on github tuyên bố rằng có thể tải xuống CSV từ Google Xu hướng. Ngoài ra còn có a blog post on the client. Bạn có thể đảo ngược kỹ sư nó thành một PHP tương đương, tốt nhất của may mắn!

0

Dường như Google không chính thức tha thứ cho bất kỳ xu hướng sử dụng dựa trên tập lệnh nào. Điều này sẽ giải thích tại sao auth của bạn không thành công vì nó không chấp nhận các kết nối api. Hãy thử sử dụng một thư viện webclient để nắm bắt một cookie và sử dụng nó để thu thập dữ liệu. Đây là giải pháp được sử dụng bởi liên kết trước đây python client on git.

Trên ghi chú có khả năng không liên quan, bạn sử dụng dịch vụ trendspro nhưng đây là tên dịch vụ cho thông tin chi tiết của Google. Chỉ thử dịch vụ => 'xu hướng'

2

Công cụ thích hợp cho đúng công việc, bạn đã xem xét PhantomJS chưa?

Nó thậm chí có thể đọc được nhiều hơn.

Các vấn đề liên quan