2013-05-12 6 views
13

मैंने देखा कि Google ने Google App Engine के लिए वित्त API को हटा दिया है। मैं चाहता हूं कि स्टॉक टिकर्स की एक सूची है जो उनके पास 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 सेवा और पेज के साथ काम करेगा। मैं पोर्टफोलियो के एचटीएमएल को portfolio.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

याहू वित्त एपीआई उपयोगकर्ता के पोर्टफोलियो तक पहुंच की अनुमति नहीं देता – gnychis

+0

आपको कुकीज़ को स्टोर करने वाले क्लाइंट को लागू करने की आवश्यकता है जावास्क्रिप्ट, और यदि आप किसी Google खाते में लॉग इन करना चाहते हैं तो रीडायरेक्ट को संभालता है। क्यों न केवल टिकर प्रतीकों को मैन्युअल रूप से निर्यात करें और फिर अलग-अलग उद्धरण प्राप्त करने के लिए सार्वजनिक API को स्क्रैप करें। सार्वजनिक एपीआई अभी भी काम करता है और शायद Google की नीतियों को कम से कम 3 वर्षों तक काम करेगा। https://www.google.com/finance/info?q=NASDAQ:AAPL –

उत्तर

5

आपको casper.js जैसे हेडलेस ब्राउज़र का उपयोग करने पर विचार करना चाहिए।

इसके साथ आप Google पर लॉगिन कर सकते हैं, Google वित्त पर जा सकते हैं और किसी पृष्ठ या किसी विशेष सीएसएस चयनकर्ता के HTML प्राप्त कर सकते हैं।

प्रवेश करने के लिए आप 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 कुकीज़ के साथ काम करता है और एक से अधिक पृष्ठों का पता लगाता है, यह आपकी आवश्यकताओं के अनुरूप होना चाहिए।

उम्मीद है कि यह मदद करता है :)

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 

मैं गूगल लॉगिन करने के लिए आवश्यक जानकारी के कुछ भरा के लिए क्या किया का एक नमूना है। लेकिन जब मैंने 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 का उपयोग करके पोर्टफोलियो पेज को पार्स करें।