2013-05-12 10 views
13

Zauważyłem, że Google usunął interfejs API finansów dla Google App Engine. Wszystko czego chcę, to lista giełd papierów wartościowych, które mają w swoim portfelu Google Finance. Czy istnieje sposób, aby nadal pobierać te dane z portfolio użytkownika końcowego, biorąc pod uwagę, że interfejs API został usunięty? Próbuję ręcznie go pobrać, ponieważ znam login i hasło (np. Moje własne).sposób dostępu do portfela Google Finance użytkownika?

Czy istnieje sposób na odzyskanie go ręcznie poprzez zwinięcie, logując się do usług Google? Wygląda na to, że powinno być możliwe zalogowanie się i przejście do strony mojego portfolio, pobranie źródła.

Próbowałem następujący kod:

#!/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 

Jednak ten kod pobiera tylko stronę, która każe mi się zalogować Rozwiązanie nie trzeba używać pozwijane, ale musi to być zautomatyzowane pobieranie użyciu. jakiś język skryptowy.


Dzięki x4avier, dowiedziałem się o casperjs i był w stanie napisać krótki skrypt, aby załadować usługi Google zalogować stronie wprowadź nazwę użytkownika i hasło, a następnie pobrać portfel Google Finance. Jestem pewien, że działałoby to z każdą inną usługą i stroną Google. Zapisz html portfolio w portfolio.html. Mam nadzieję, że to pomoże również komuś innemu.

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

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

+0

Yahoo finance API również nie pozwala na dostęp do portfolio użytkownika – gnychis

+0

Musisz zaimplementować klienta, który przechowuje pliki cookie, działa javascript i obsługuje przekierowania, jeśli chcesz zalogować się na konto Google. Dlaczego nie wyeksportować symboli ticker ręcznie, a następnie zeskrobać publiczny API, aby uzyskać indywidualne oferty. Publiczny interfejs API nadal działa i prawdopodobnie będzie działał przez co najmniej kolejne 3 lata, zgodnie z zasadami Google. https://www.google.com/finance/info?q=NASDAQ:AAPL –

Odpowiedz

5

Należy rozważyć użycie przeglądarki bezgłowej, takiej jak casper.js.

Dzięki niej możesz zalogować się do google, przejść do google finance i uzyskać kod HTML strony lub konkretnego selektora css.

Aby zalogować będziesz korzystać z funkcji fill(), to działa tak:

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

casper.run(); 

Następnie można analizować stronę i specyficzną zawartość z getHTML(), działa jak poniżej:

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

CasperJs działa z plikami cookie i eksploruje więcej niż jedną stronę, powinna pasować do twoich potrzeb.

Nadzieja to pomaga :)

1

Jakie informacje chcesz dokładnie odzyskać?

Jest to dość łatwe do zrobienia, że ​​przy użyciu Pythona urllib i BeautifulSoup http://docs.python.org/2/library/urllib2.html http://www.crummy.com/software/BeautifulSoup/bs4/doc/

Zrobiłem to sam odpowiedzieć i odbierać wiadomości na różnych forach internetowej. Jedyną rzeczą, która nie jest fajna, jest to, że musisz zakodować kod id niektórych elementów, które chcesz odzyskać.

Oto próbka tego, co zrobiłem dla strony logowania

#!/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 

Wypełniłem niektóre z wymaganych informacji do logowania google. Ale kiedy sprawdziłem żądanie POST, było kilka innych wartości, które być może będziesz musiał dodać również w wartościach dyktowanych.

Oto żądanie POST I zrobione:

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 

Chyba trzeba będzie analizować stronę logowania z użyciem BeautifulSoup dostać te wartości przed rzeczywiście można wysłać formularz. Zastanawiam się, czy powyższy casper robi to automatycznie, czy wolisz go użyć, a następnie przeanalizować stronę portfolio za pomocą Beatifulsoup, czego tylko chcesz.

Powiązane problemy