Способ доступа к портфолио Google Google? - программирование

Способ доступа к портфолио Google Google?

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

Есть ли способ получить его вручную через завиток, войдя в службы 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 и смог быстро написать script, чтобы загрузить страницу входа в службы 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();
4b9b3361

Ответ 1

Вам следует рассмотреть возможность использования браузера без браузера, например 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 и исследует более одной страницы, это должно соответствовать вашим потребностям.

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

Ответ 2

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

Это довольно легко сделать, используя python 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, чтобы получить эти значения, прежде чем вы сможете отправить форму. Интересно, если приведенный выше пример casper делает это автоматически, если вы его предпочитаете использовать, а затем проанализируйте страницу портфолио с помощью Beatifulsoup того, что вы хотите.