2017-11-15 9 views
-2

Facebook広告からの自動生成レポートのダウンロードを自動化しようとしています。レポートをダウンロードする準備ができたら、本文にダウンロードリンクがあるメールが届きます。私たちは、メッセージの本文を解析し、csvファイルダウンロードするには、この(編集済み)のURLを取得:私は、ブラウザのアドレスバーにこのファイルを置く場合は、ファイルのダウンロードが開始さダウンロードリクエストでPythonでファイルをダウンロードするurl

https://www.facebook.com/ads/manage/download_report.php?act=<account_id>&report_run_id=<run_id>&format=csv&source=email_v2 

を、私はダウンロードしようとすると、 Pythonライブラリrequestsurllib2を使用したコンテンツは:

import requests 
url = 'https://www.facebook.com/ads/manage/download_report.php?act=\ 
     <account_id>&report_run_id=<run_id>&format=csv&source=email_v2' 
r = requests.get(url, allow_redirects=True) 
open('test.txt', 'a+').write(r.content) 

結果ファイルには、このファイルのパスに添付何のリソースがありませんことは明らかですので、私が期待したデータのどれが含まれていないだけのHTMLです。

どうすればPythonでダウンロードを開始できますか?

+1

あなたのPythonスクリプトは、自分のFacebookのアカウントにログインしていません。 – kindall

+0

@kindallそこに行きます。だから私はget要求でFacebookの認証を渡す方法を理解する必要があります。 – cdhanson

答えて

0

Facebookに認証し、これらのクッキーを使用してこのファイルをダウンロードする必要があります。それをするのは難しいことではありませんが、別の質問の価値があります。

open組み込み関数が間違っています。
あなたは、このようなダウンロードされたファイル記述する必要があります:複数のファイルを扱う場合、ファイルオブジェクトが削除されていない場合

import requests 
url = 'https://www.facebook.com/ads/manage/download_report.php?act=\ 
     <account_id>&report_run_id=<run_id>&format=csv&source=email_v2' 
r = requests.get(url, allow_redirects=True) 
f = open('test.txt', 'a+') 
f.write(r.content) 
f.close() 

を、IOError: [Errno 24] Too many open files例外が発生します。
は、Python documentationから引用:

ファイルオブジェクトを扱うときwithキーワードを使用することをお勧めします。利点は、たとえ例外が何らかのポイントで発生したとしても、スイートが終了した後にファイルが適切に閉じられることです。で使用しても、同等のtry-finallyブロック

例を書くよりもはるかに短いです:お使いのブラウザがある一方で

with open('test.txt', 'a+') as f: 
    f.write(r.content) 
    # f.close() # it is redundant 
+0

これにより、間違ったデータがファイルに書き込まれることはありません。 – kindall

+0

技術的には真ですが、トピックには関係ありません。 – cdhanson

+1

@cdhansonあなたはブラウザからクッキーがありません! –

関連する問題