2017-07-21 10 views
0

私はyahooファイナンスから財務情報を取得するデジットトレーディングアプリを開発しています。コードは以下の通りです。PythonのURLがファイルをダウンロードしない

from datetime import datetime 
from calendar import timegm 
import time 

def constructYFURL(ticker, start_date,end_date,freq): 
    start_date = str(timegm(time.strptime(start_date, "%Y-%m-%d"))) 
    end_date = str(timegm(time.strptime(end_date, "%Y-%m-%d"))) 
    if freq == 'w': 
     interval = '1wk' 
    else: 
     interval = '1mo' 
    if freq == 'd': 
     interval = '1d' 
    yFURL = "https://query1.finance.yahoo.com/v7/finance/download/"+ticker+"?  period1="+start_date+"&period2="+end_date+"&interval="+interval+"&events=history&crumb=jfsRogYbS3." 
    return yFURL 


def download(filePath, urlOfFile): 
    import urllib2 

    webRequest = urllib2.Request(urlOfFile) 

    try: 
     page = urllib2.urlopen(webRequest) 
     content = page.read() 

     with open(filePath, 'wb') as output: 
      output.write(bytearray(content)) 

    except urllib2.HTTPError, e: 
     print e.fp.read() 

私は株式相場を希望するティッカーと期間を選択してコードをテストします。

from download import constructYFURL, download 
from datetime import datetime 
from time import time 

ticker = "NFLX" 

start_date = "2016-07-18" 

end_date = "2017-08-18" 

freq = "d" 

yFURL = constructYFURL(ticker, start_date,end_date,freq) 

print yFURL 

localFilePath = "/Users/Gebruiker/pytest/nflx.csv" 

download(localFilePath,yFURL) 

これは結果のURLです:

https://query1.finance.yahoo.com/v7/finance/download/NFLX?period1=1468800000&period2=1503014400&interval=1d&events=history&crumb=eVjSxKy2scr

エラーは以下の通りである:それは私のブラウザを使用してリンクをクリックしたときただし、ファイルをダウンロードし

{ 
"finance": { 
    "error": { 
     "code": "Unauthorized", 
     "description": "Invalid cookie" 
    } 
    } 
} 

Process finished with exit code 0 

、私はまだエラーを与えると私はそれが保存されるために指定されたリポジトリ内のCSVファイルを見つけることができません。誰でも私を助けることができますか?私はこれを修正することができますクッキーを処理するurllib2のpythonライブラリからのハンドラを使用することで推測するが、私はどのようにわからない。

+0

まず、字下げを修正してください。 –

+0

'' 'requests'''ライブラリを試してみるのはずっと簡単です。それは、あなたが認証トークンを持っていないようです。あなたのヘッダーにそれを渡すのは間違いありませんか? –

答えて

1

おそらく、そのURLにアクセスするにはログインする必要があります。

この場合、リクエストのヘッダーにはCookieが必要です。これらはログイン時に生成されます。ブラウザで処理されるため、ブラウザで動作します。

1つの方法は、requestsモジュールとそのSessionオブジェクトを使用することです。これはCookieを自動的に管理します。 Sessionを作成し、そこからログインすると、URLにアクセスできるようになります。

+0

私は問題を解決すると思いますが、私はリクエストモジュールの経験がありません。クッキーの生成方法を書いてもらえますか? –

+0

@JovanGligorevićあなたがそれを心配する必要はありません、それを介してログインすると、セッションで自動的にクッキーが生成されます:) –

+0

申し訳ありません申し訳ありませんが、セッションモジュールのドキュメントの 'セッション'オブジェクトの説明が見つかりませんでした。 requests.session()呼び出し。認証するために正確に何をする必要がありますか? –

関連する問題