はじめに
有用な投稿「 ポッドキャストダウンロードのmp3プレーヤーへの自動化 」がありました。 iTunesやその他の同様のソフトウェアを使用していないので、私にとっては便利です(これについては説明しません:)。 読者のフィードに定期的に集まるポッドキャストのパックをダウンロードするだけです。 そして、私はPHPよりもPythonを好みます。
私はいくつかのアドバイスを聞きたいです-私はPythonのみを学んでいます。 そして、初心者向けの例を使って投稿を書くのが好きです。 コメントは、批評家が...だろうが、ポイントに。
プロセス編成
ポッドキャストテープのリストをGoogleリーダーに保管しています。 リボンにはタグがタグ付けされており、フォルダ内にきれいに配置されています。Podcastsフォルダに落ちた新しいポッドキャストを送り出すために、私は小さなPythonスクリプトを書きました。 便利なGoogleReaderクラスが実装されているPyrfeedライブラリーを基礎としました。
ライブラリのソースコードが利用可能であり、それを使用した小さなサンプルが含まれています。 ドキュメントがあります。 確かに、ドキュメントはGoogle Reader APIでのみ見つかり、ライブラリ自体の操作では見つかりませんでした。 RSSフィードを読み取るためのGuiインターフェイスを備えたユーティリティの例もあります。
ソースコード
最後にソースを含むアーカイブへのリンク。メインスクリプトのソースは次のとおりです。
インポートシステム 輸入OS 輸入時間 urlparseをインポートする urllibをインポートする インポートプログレスバー GoogleReaderをインポートする downloadDir = "myDownloadDir"; logFile = downloadDir + "PodcastsDownloadTool.log"; tag = "ポッドキャスト"; login = "myGoogleReaderLogin"; パスワード= "myGoogleReaderPassword"; def GetLocalFileNameFromURL(フルパス): (ファイルパス、ファイル名)= os.path.split(urlparse.urlparse(フルパス).path) downloadDir +ファイル名を返す def LogMessage(メッセージ): f =オープン(logFile、「a」) 印刷>> f、メッセージ。 f.close(); 合格する def DownloadFile(URL、ファイル名): progressBar.ResetProgressBar(); urllib.urlretrieve(url、filename、reporthook = progressBar.ProgressBarReportHook); 合格する def ProcessPodcastDownloading(): #dirを確認して作成 os.path.existsでない場合(downloadDir): os.mkdir(downloadDir); #Googleリーダーにログイン gr = GoogleReader.GoogleReader(); gr.identify(ログイン、パスワード); gr.login()の場合: 「ログインOK」を印刷します。 その他: 「ログインKO」を印刷します。 帰る xmlfeed = gr.get_feed(feed = "user /-/ label /%s"%タグ、n = 17、xt = "user /-/ state / com.google / read"); xmlfeed.get_entries()のエントリ: 試してください: googleID =エントリ['google_id']; entry.has_key( 'enclosure')の場合: #変数の準備と情報の印刷 URLToDownload =エントリ['エンクロージャ']; localFilePath = GetLocalFileNameFromURL(URLToDownload); print "Title:%s"%entry ['title']; print "URLからダウンロード:%s ..."%URLToDownload; print "ローカルファイル:%s"%localFilePath; #ファイルをダウンロード DownloadFile(url = URLToDownload、ファイル名= localFilePath) #ログメッセージ LogMessage( "%s%s%s%s \ n"%(time.strftime( '%x%X')、URLToDownload、googleID、entry ['published'])); 「ダウンロード済み」を印刷します。 #既読にする gr.set_read(googleID); 「マーク」を印刷します。 を除く: #エラーを印刷して記録する print "Error:"、sys.exc_info(); LogMessage( "%s \ nエラー:%s \ nEntry:%s \ n例外情報:%s \ n%s \ n"%( "=" * 80、time.strftime( '%x%X')、entry、 sys.exc_info()、 "=" * 80)); 合格する __name __ == '__ main__'の場合: ProcessPodcastDownloading();
コードの説明
主なパラメーターは、スクリプトの最初に設定されます。- downloadDir-ポッドキャストがダウンロードされるディレクトリ
- logFile-ログファイル
- tag-フィードが表示されるGoogleリーダーのタグ/フォルダーの名前
- ログインとパスワード-Googleリーダーのログインとパスワード
そして、複雑なことは何もありません:
- Google Reader認証
- 解析されたRSSフィードを受信する
- 情報の出力とロギングを伴う記録のサイクル
- 実際にファイルをダウンロードする
- レコードレーベル読み取り
pyrfeedライブラリ自体はアプリケーションに含まれていません。 それをダウンロードし、数行(後ほど)を作成し、インポートに適した場所に置くだけで十分です。 たとえば、PythonがインストールされているディレクトリのLibディレクトリでは、ライブラリはすべてのスクリプトで使用可能になります。
GoogleReaderとWebディレクトリは、スクリプトが置かれているディレクトリと同じディレクトリにあります。
インターフェース
これはコンソールユーティリティです。 結論を導きます。起動プロセスを表示するだけで次のようになります。
進行状況バーはいくつかの例から取られています。 正確な場所は覚えていません。 インターネットには多くの例があり、ほとんどが似ています。 ソースはアプリケーション内にあります。
feed.pyのパッチ
残念ながら、GoogleFeedクラスは結果のXMLからダウンロードリンクを取得しません。このようなスニペットの後にXML解析を追加して、この問題を解決しました。
elif dom_entry_element.localName == 'link': dom_entry_element.getAttribute( 'rel')== 'alternate'の場合: エントリ['link'] = dom_entry_element.getAttribute( 'href')
そのような作品:
dom_entry_element.getAttribute( 'rel')== 'enclosure'の場合: エントリ['enclosure'] = dom_entry_element.getAttribute( 'href')
次のようになりました。
elif dom_entry_element.localName == 'link': dom_entry_element.getAttribute( 'rel')== 'alternate'の場合: エントリ['link'] = dom_entry_element.getAttribute( 'href') dom_entry_element.getAttribute( 'rel')== 'enclosure'の場合: エントリ['enclosure'] = dom_entry_element.getAttribute( 'href') elif dom_entry_element.localName == 'category':
私に合った欠点
- 履歴書はサポートされていません。 障害が発生した場合、RSSフィードは既読としてマークされません。 次回スクリプトを実行すると、ファイルが再度ダウンロードされます。
- したがって、次のポイント-次回スクリプトを実行すると、誤ったエントリ(たとえば、ダウンロードするファイルへのリンクがないエントリが発生します)が再処理されます。 特別なタグでタグ付けし、将来スキップすることができます。 しかし、未読のエントリをテープで手動で表示することに満足しています。
- 構成ストレージ-クリアテキストでのログインとパスワード。 ログインはまだそれほど怖くありませんが、パスワードは... getpass()関数を使用するか、別の場所に保存できます。
たとえば、 USB Detect&Launchユーティリティを使用して、USBフラッシュドライブまたはプレーヤーを接続すると、スクリプトの起動を自動化できます(ハブで既に説明しました)。
フィニッシュライン
アーカイブ内のソース 。ページからメモをコピーしました。