yolu?

2013-05-12 16 views
13

Google'ın, Google App Engine için Finans API'sını kaldırdığını fark ettim. Tek istediğim, Google Finans portföyünde sahip oldukları hisse senedi biletlerinin bir listesi. API'nın kaldırıldığından bu veriyi son kullanıcının portföyünden çekmenin bir yolu var mı? Giriş ve şifreyi bildiğimden (örneğin, kendi başıma olduğumdan) emin olarak el ile almaya çalışıyorum.yolu?

Google hizmetlerinde oturum açarak, kıvrılma yoluyla el ile almanın bir yolu var mı? Giriş yapmak ve kaynak sayfamı almak için portföy sayfamıza gitmek mümkün gibi görünüyor.

Aşağıdaki kodu denedi

: Ancak

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

, bu kodu yalnızca giriş yapmak için bana söyler bir sayfayı alır çözüm curl kullanmak gerekmez, ancak kullanarak bir otomatik alma olmalıdır. bazı betik dili. x4avier için


sayesinde, casperjs öğrendi ve Google hizmetleri, giriş sayfası yüklemek kullanıcı adı ve şifreyi girin ve ardından Google Finans portföyü getirmesi için hızlı bir senaryo yazmaya başardı. Bunun diğer herhangi bir Google hizmetiyle ve sayfayla çalışacağından eminim. Portföyün html dosyasını portföy.html'ye kaydediyorum. Umarım bu da başka birine yardımcı olur.

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

http://stackoverflow.com/questions/10040954/alternative-to-google-finance-api bakın –

+0

Yahoo finans API zamanda kullanıcının portföyünde çerezleri depolayan bir müşteri uygulamak gerekir – gnychis

+0

erişime izin vermez, ishal Bir Google Hesabına giriş yapmak istiyorsanız javascript ve yönlendirme yönlendirmeleri. Neden yalnızca ticker sembollerini dışa aktarmıyoruz ve tek tek teklifleri almak için kamu API'sını kazıyın. Genel API hala çalışır ve muhtemelen Google'ın politikaları göz önüne alındığında en az üç yıl daha çalışır. https://www.google.com/finance/info?q=NASDAQ:AAPL –

cevap

5

Sen casper.js gibi bir başsız tarayıcı kullanarak düşünmelisiniz.

Bununla birlikte, Google'a giriş yapabilir, google finansa gidebilir ve bir sayfanın veya belirli bir css seçicinin HTML'sini alabilirsiniz.

bu gibi işleri, sen fill() fonksiyonunu kullanmak olacak giriş için:

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

casper.run(); 

Sonra sayfası ve getHTML() ile belirli içeriği ayrıştırmak, aşağıdaki gibi çalışır:

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

CasperJs, çerezlerle çalışır ve birden fazla sayfayı araştırır, ihtiyaçlarınızı karşılamalıdır.

bunu tam olarak almak istiyoruz hangi bilgiler :)

1

yardımcı Umut?

Bu piton urllib kullanarak ve kendimi göndermek ve farklı forumlar web sitesinde iletileri almak için bunu yaptık http://docs.python.org/2/library/urllib2.html http://www.crummy.com/software/BeautifulSoup/bs4/doc/

BeautifulSoup bunu yapmak oldukça kolay. Serin olmayan tek şey, almak istediğiniz bazı öğelerin kimliğini kodlamanız gerektiğidir.

İşte google giriş için gerekli olan bilgi bazılarını doldurdu giriş kısmında

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

için yaptıklarının bir örnek. Ancak POST isteğini kontrol ettiğimde, bazı değerlerin de var olduğu gibi değerlerin de eklenmesi gerekebilir.Ben size aslında formu göndermeden önce bu değerleri almak için BeautifulSoup kullanarak oturum açma sayfasını ayrıştırmak zorunda kalacak tahmin

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 

:

İşte yakalanan POST isteği bu. Merak ettim ki, yukarıda verilen casper örneği bunu otomatik olarak yapar mı, eğer kullanmayı tercih ederseniz ve istediğinizde Beatifulsoup'u kullanarak portföy sayfasını ayrıştırırsanız.