2016-05-11 9 views
0

Google Finance JSONデータをデータフレームに変換しようとしています。 私が試した:R:Google FinanceのJSONデータをデータフレームに変換する

library(jsonlite) 
dat1 <- fromJSON("http://www.google.com/finance/info?q=NSE:%20AAPL,MSFT,TSLA,AMZN,IBM") 
dat1 

を私はエラーを取得するしかし:

Error in feed_push_parser(readBin(con, raw(), n), reset = TRUE) : parse error: trailing garbage

は、任意の助けてくれてありがとう。

+0

を使用して、次の作品は、ちょうどあなたの質問を頼まれた実現特定のRのために。私の答えはPythonでした。しかし、彼らはかなり似ているので、あなたが私が何を投稿したものを使っても解決策を見つけることができることを願っています。そうでない場合は、完全に役に立たない場合には私に教えてください。その場合、病気を取り除いてください – PyNoob

答えて

1

私は私の側から原因プロキシの問題にfromJSONを使用して、エラーを複製することができませんでしたが、httr

require(jsonlite) 
require(httr) 

#Set your proxy setting if needed 
#set_config(use_proxy(url='hostname',port= port,username="",password="")) 

url.name = "http://www.google.com/finance/info?q=NSE:%20AAPL,MSFT,TSLA,AMZN,IBM" 

url.get = GET(url.name) 


#parsing the content as json results in similar error as you encountered 

#url.content = content(url.get,type="application/json") 
#Error in parseJSON(txt) : parse error: trailing garbage 
#   " : "0.57" ,"yld" : "2.46" } ,{ "id": "358464" ,"t" : "MSFT" 
#      (right here) ------^ 





#read content as html text 
url.content = content(url.get, as="text") 

#remove html tags 
clean.text = gsub("<.*?>", "", url.content) 

#remove residual text 
clean.text = gsub("\\n|\\//","",clean.text) 

DF = fromJSON(clean.text) 

head(DF[,1:10],5) 

#  id t  e  l l_fix l_cur s  ltt     lt    lt_dts 
#1 22144 AAPL NASDAQ 92.51 92.51 92.51 1 4:00PM EDT May 11, 4:00PM EDT 2016-05-11T16:00:02Z 
#2 358464 MSFT NASDAQ 51.05 51.05 51.05 1 4:00PM EDT May 11, 4:00PM EDT 2016-05-11T16:00:02Z 
#3 12607212 TSLA NASDAQ 208.96 208.96 208.96 1 4:00PM EDT May 11, 4:00PM EDT 2016-05-11T16:00:02Z 
#4 660463 AMZN NASDAQ 713.23 713.23 713.23 1 4:00PM EDT May 11, 4:00PM EDT 2016-05-11T16:00:02Z 
#5 18241 IBM NYSE 148.95 148.95 148.95 2 6:59PM EDT May 11, 6:59PM EDT 2016-05-11T18:59:12Z 
+0

それは素晴らしいです。ありがとうございました。 –

0

私はhereから以下のコードを取得しました。これが役に立ったら教えてください。また、ネットフォンもお勧めします。 Netfondsは、今日私が見つけた唯一の情報源です。tickレベルの過去の価格とオープンブックのデータです。あなたが興味を持っているなら、Netfondsのデータを引き出すためのいくつかの追加のリンクを投稿しました。

http://www.blackarbs.com/blog/3/22/2015/how-to-get-free-intraday-stock-data-from-netfonds

http://www.onestepremoved.com/free-stock-data/

import urllib 
from datetime import date, datetime 

""" googlefinance 
This module provides a Python API for retrieving stock data from Google Finance. 
""" 
_month_dict = { 
     'Jan': 1, 
     'Feb': 2, 
     'Mar': 3, 
     'Apr': 4, 
     'May': 5, 
     'Jun': 6, 
     'Jul': 7, 
     'Aug': 8, 
     'Sep': 9, 
     'Oct': 10, 
     'Nov': 11, 
     'Dec': 12} 


# Google doesn't like Python's user agent... 
class FirefoxOpener(urllib.FancyURLopener): 
    version = 'Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11' 

def __request(symbol): 
    url = 'http://google.com/finance/historical?q=%s&output=csv' % symbol 
    opener = FirefoxOpener() 
    return opener.open(url).read().strip().strip('"') 


def get_historical_prices(symbol, start_date=None, end_date=None): 
    """ 
    Get historical prices for the given ticker symbol. 
    Returns a nested list. fields are Date, Open, High, Low, Close, Volume. 
    """ 

    price_data = [data.split(',') for data in __request(symbol).split('\n')[1:]] 
    for quote in price_data: 
     quote[0] = _format_date(quote[0]) 
    return price_data 

def _format_date(datestr): 
    """ Change datestr from google format ('20-Jul-12') to the format yahoo uses ('2012-07-20') 
    """ 
    parts = datestr.split('-') 
    day = int(parts[0]) 
    month = _month_dict[parts[1]] 
    year = int('20'+ parts[2]) 
    return date(year, month, day).strftime('%Y-%m-%d') 
+0

ありがとうございました。興味深いことに、Pythonのソリューションを見てください。 –

関連する問題