2013-05-12 6 views
13

Я заметил, что Google удалил API финансов для Google App Engine. Все, что я хочу, это список биржевых котировок, которые они имеют в своем портфеле Google Finance. Есть ли способ потянуть эти данные из портфолио конечного пользователя, учитывая, что API был удален? Я пытаюсь вручную получить его, учитывая, что я знаю логин и пароль (например, это мой собственный).способ получить доступ к портфолио Google Google?

Есть ли способ получить его вручную через завиток, войдя в службы Google? Похоже, что нужно войти в систему и перейти на мою страницу портфолио, извлекая источник.

Я попытался следующий код:

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

Однако этот код извлекает только страницу, которая говорит мне, чтобы войти Решение не нужно использовать локон, но он должен быть автоматизирован поиска с использованием. некоторые скриптовые языки.


Благодаря x4avier, я узнал о casperjs и был в состоянии написать небольшой скрипт для загрузки входа в систему службы Google страницу, введите имя пользователя и пароль, а затем принести портфель Google Finance. Я уверен, что это будет работать с любыми другими службами и страницами google. Я сохраняю html портфолио в портфолио. Html. Надеюсь, это тоже поможет кому-то еще.

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 –

+0

Yahoo Finance API также не разрешает доступ к портфолио пользователя – gnychis

+0

Вам необходимо реализовать клиента, который хранит файлы cookie, запускает javascript и обрабатывает переадресацию, если вы хотите войти в учетную запись Google. Почему бы не просто экспортировать символы тикера вручную, а затем очистить публичный API, чтобы получить отдельные кавычки. Открытый API по-прежнему работает и, вероятно, будет работать, по крайней мере, еще на 3 года с учетом политики Google. https://www.google.com/finance/info?q=NASDAQ:AAPL –

ответ

5

Вам следует рассмотреть возможность использования безголового браузера, такого как casper.js.

С его помощью вы можете войти в Google, перейти в Google Finance и получить html страницы или конкретного селектора css.

Для входа вы будете использовать функцию fill(), она работает так:

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

casper.run(); 

Затем вы можете разобрать страницу и конкретное содержание с getHTML(), работать, как показано ниже:

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

CasperJs работает с файлами cookie и исследует более одной страницы, это должно соответствовать вашим потребностям.

Надеюсь, это поможет :)

1

Какую информацию вы хотите точно получить?

Это довольно легко сделать, используя питон URLLIB и BeautifulSoup http://docs.python.org/2/library/urllib2.html http://www.crummy.com/software/BeautifulSoup/bs4/doc/

Я сделал это сам, чтобы отправлять и получать сообщения на другом сайте форумов. Единственное, что не круто, это то, что вам нужно жестко указать идентификатор некоторых элементов, которые вы хотите получить.

Вот пример того, что я сделал для входа части

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

я заполнил некоторые из необходимой информации для входа в систему Google. Но когда я проверил запрос POST, были некоторые другие значения, которые вам, возможно, нужно добавить тоже в значениях dict.

Вот запрос POST я захватил:

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 

Я думаю, вам придется разобрать страницу входа в систему с помощью BeautifulSoup, чтобы получить эти значения, прежде чем вы можете отправить форму. Интересно, делает ли приведенный выше пример кассера автоматически, если вы предпочитаете его использовать, а затем анализируйте страницу портфолио с помощью Beatifulsoup того, что вы хотите.