2013-05-12 66 views
13

Tôi nhận thấy rằng Google đã xóa API tài chính cho Google App Engine. Tất cả những gì tôi muốn là danh sách các mã cổ phiếu mà họ có trong danh mục đầu tư của Google Finance. Có cách nào để vẫn lấy dữ liệu này từ danh mục đầu tư của người dùng cuối hay không, vì API đã bị xóa? Tôi đang cố truy xuất nó theo cách thủ công vì tôi biết thông tin đăng nhập và mật khẩu (ví dụ: đó là của riêng tôi).cách truy cập danh mục đầu tư của Google Finance của người dùng?

Có cách nào để truy xuất thủ công thông qua curl, bằng cách đăng nhập vào các dịch vụ của Google không? Có vẻ như có thể đăng nhập và truy cập trang danh mục của tôi, truy xuất nguồn.

Tôi đã thử đoạn mã sau:

#!/bin/bash 

function ClientLogin() { 
    read -p 'Email> ' email 
    read -p 'Password> ' -s password 
    local service=$1 
    curl -s -d Email=$email -d Passwd=$password -d service=$service https://www.google.com/accounts/ClientLogin | tr ' ' \n | grep Auth= | sed -e 's/Auth=//' 
} 

function GetFinance() { 
    curl -L -s -H "Authorization: GoogleLogin auth=$(ClientLogin finance)" "http://www.google.com/finance/portfolio?action=view&pid=1" &> output.html 
} 

GetFinance 

Tuy nhiên, mã này chỉ lấy một trang đó nói với tôi để đăng nhập Các giải pháp không cần phải sử dụng curl, nhưng nó phải là một hồi tự động sử dụng. một số ngôn ngữ kịch bản.


Nhờ x4avier, tôi đã học về casperjs và đã có thể viết một kịch bản nhanh chóng để tải các dịch vụ của Google trang đăng nhập, nhập tên người dùng và mật khẩu, và sau đó lấy danh mục Google Finance. Tôi chắc rằng điều này sẽ hoạt động với bất kỳ trang và dịch vụ google nào khác. Tôi lưu html của danh mục đầu tư vào portfolio.html. Hy vọng rằng điều này sẽ giúp người khác cũng có.

var fs = require('fs'); 
var failed = []; 
var links = [ 
    "https://www.google.com/finance/portfolio?action=view&pid=13" 
]; 

var casper = require('casper').create({ 
    verbose: true, 
    logLevel: 'debug', 
    pageSettings: { 
     loadImages: false,   // The WebPage instance used by Casper will 
     loadPlugins: false,   // use these settings 
     userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537 
    } 
}); 

// print out all the messages in the headless browser context 
casper.on('remote.message', function(msg) { 
    this.echo('remote message caught: ' + msg); 
}); 

// print out all the messages in the headless browser context 
casper.on("page.error", function(msg, trace) { 
    this.echo("Page Error: " + msg, "ERROR"); 
}); 

var url = 'https://accounts.google.com/ServiceLogin?service=finance'; 

casper.start(url, function() { 
    // search for 'casperjs' from google form 
    console.log("page loaded"); 
    this.test.assertExists('form#gaia_loginform', 'form is found'); 
    this.fill('form#gaia_loginform', { 
     Email: '[email protected]', 
     Passwd: 'yourpass' 
    }, true); 
}); 

casper.each(links, function(casper, link) { 
    this.then(function() { 
     this.test.comment("Loading " + link); 
     start = new Date(); 
     this.open(link); 
    }); 
    this.then(function() { 
     var message = this.requestUrl + " loaded"; 
     if (failed.indexOf(this.requestUrl) === -1) { 
      this.test.pass(message); 
      fs.write('portfolio.html',this.getPageContent(),'w'); 
     } 
    }); 
}); 

casper.run(); 
+0

Xem http://stackoverflow.com/questions/10040954/alternative-to-google-finance-api –

+0

API tài chính của Yahoo cũng không cho phép truy cập vào danh mục đầu tư của người dùng – gnychis

+0

Bạn cần triển khai ứng dụng khách lưu trữ cookie, chạy javascript và xử lý chuyển hướng nếu bạn muốn đăng nhập vào Tài khoản Google. Tại sao không chỉ xuất khẩu các biểu tượng ticker bằng tay và sau đó cạo các API công cộng để có được báo giá cá nhân. API công khai vẫn hoạt động và có thể sẽ hoạt động trong ít nhất 3 năm nữa theo các chính sách của Google. https://www.google.com/finance/info?q=NASDAQ:AAPL –

Trả lời

5

Bạn nên cân nhắc sử dụng trình duyệt không đầu như casper.js.

Với ứng dụng này, bạn có thể đăng nhập vào google, truy cập tài chính của google và nhận html của trang hoặc bộ chọn css cụ thể.

Để đăng nhập, bạn sẽ sử dụng fill() chức năng, nó hoạt động như thế này:

casper.start('http://admin.domain.tld/login/', function() { 
    this.fill('form[id="login-form"]', { 
     'username': 'chuck', 
     'password': 'n0rr1s' 
    }, true); 
}); 

casper.run(); 

Sau đó, bạn có thể phân tích các trang và nội dung cụ thể với getHTML(), làm việc như sau:

casper.then(function() { 
    this.echo(this.getHTML('h1#foobar')); // => 'The text included in the <h1 id=foobar>' 
}); 

CasperJs hoạt động với cookie và khám phá nhiều trang, nó phải phù hợp với nhu cầu của bạn.

Hy vọng điều đó sẽ giúp :)

1

Bạn muốn lấy thông tin nào chính xác?

Đó là khá dễ dàng để làm điều đó bằng python urllib và BeautifulSoup http://docs.python.org/2/library/urllib2.html http://www.crummy.com/software/BeautifulSoup/bs4/doc/

tôi đã thực hiện nó bản thân mình để gửi và lấy các thông điệp trên trang web diễn đàn khác nhau. Điều duy nhất mà không phải là mát mẻ là bạn phải hardcode id của một số yếu tố bạn muốn lấy.

Dưới đây là một ví dụ về những gì tôi đã làm cho phần đăng nhập

#!/usr/bin/python 

import urllib 
import urllib2 
import cookielib 
import BeautifulSoup 

url = "https://accounts.google.com/ServiceLogin?hl=en"; 
values = {'Email': '[email protected]', 'Passwd' : '', 'signIn' : 'Sign in', 'PersistentCookie' : 'yes'} # The form data 'name' : 'value' 

cookie = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) 
data = urllib.urlencode(values) 
response = self.opener.open(url, data) 
print response 

tôi điền một số thông tin cần thiết cho việc đăng nhập google. Nhưng khi tôi kiểm tra yêu cầu POST có một số giá trị khác mà bạn có thể cần phải thêm vào trong giá trị dict.

Đây là yêu cầu POST tôi bị bắt:

dsh:5606788993588 
hl:en 
checkedDomains:youtube 
checkConnection:youtube:47:1,youtube:46:1 
pstMsg:1 
GALX:YU6dyLz2tHE 
pstMsg:0 
dnConn: 
checkConnection: 
checkedDomains:youtube 
timeStmp: 
secTok: 
_utf8:☃ 
bgresponse:!A0LP9ks4H06eS0R0GKgonCCotgIAAAAiUgAAAAkqAOjHBiH2qA-EIczqcDooax5q8bxis... 
Email:****@gmail.com 
Passwd:mypassword 
signIn:Sign in 
PersistentCookie:yes 
rmShown:1 

Tôi đoán bạn sẽ phải phân tích các trang đăng nhập sử dụng BeautifulSoup để có được giá trị này trước khi bạn thực sự có thể gửi thư chấp thuận. Tôi tự hỏi nếu ví dụ casper đưa ra ở trên không tự động, nếu nó bạn muốn sử dụng nó và sau đó phân tích các trang danh mục đầu tư bằng cách sử dụng Beatifulsoup của bất cứ điều gì bạn muốn.

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