Python + Googleリーダーポッドキャストスクリプト

はじめに



有用な投稿「 ポッドキャストダウンロードの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();




コードの説明

主なパラメーターは、スクリプトの最初に設定されます。

そして、複雑なことは何もありません:

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': 




私に合った欠点

フィニッシュライン

アーカイブ内のソース

ページからメモをコピーしました。



All Articles