{Python}自分のTLの画像を保存する(3)

前回までで、自分のタイムラインの情報を取得し、必要なツイートのみを選別することができました。 いよいよDLするコードを書いていこうと思います。 以下の処理はすべて前回の記事の最後のスニペット内「#このあとにDL処理を書く」に書きます。 環境等 win 10 python2.x python lib: os python lib: requests DL対象のURLリストを作成 データの中からDLするコンテンツのURLを取得し、配列に格納します。 動画の場合はURLの格納されている場所が違うので、場合分けをして取得します。 保存ディレクトリとファイル名の設定 DLする前に画像を保存するディレクトリと個々の画像のファイル名の定義をする必要があります。 ファイル名は被ってしまうと上書きされてしまうので、必ず一意になるものを考えます。 #ディレクトリ設定 すべて同じフォルダに保存してもいいのですが、ここでは、このpythonプログラムが入っているディレクトリに「」のフォルダを作って、ユーザーごとにフォルダを振り分けて保存してみます。 #ベース画像ファイル名(これに連番を付ける) 画像ファイル名は、$dateと$url_idをアンダーバーで繋いだものにしました。 さらに、この末尾に後ほど書くDL処理のなかで1~4の連番を振ることで一意のファイル名となります。 $dateは、本文中に書かれたyymmdd形式の日付をyyyy-mm-ddに変換したもの、 $url_idはツイートの短縮URLの末尾の英数字、 1~4の連番はツイート中の何枚目の添付画像かを表したものです。 画像のダウンロード 上記で用意した変数を使って、「人間のためのHTTP」という売りで分かりやすい?requestsというHTTPライブラリを使ってURLから画像を取得していきます。 ツイッターではなかなかないですが、画像のDLは画像が削除されていたりしてできないときもあるのでtry~exceptで、失敗した時の処理も記述しておきます。 さて、これで、このpythonプログラムが置いてあるのと同じディレクトリにuser_idごとのフォルダが生成され、そのなかに画像や動画が保存されているはずです。 次のエントリでは、 一度に取得できる200件よりもさらに古いツイートを取得するコード、 継続的に使用するために、前回保存時以降のツイートのみを取得するコード を書き足していきたいと思います。

{Python}自分のTLの画像を保存する(2)

前回の記事では、TwitterAPIにリクエストを送信し結果の格納されたレスポンスを得るところまでやりました。 この記事では、そのレスポンスから必要な情報を取り出し、必要なツイートを選別する処理について書きます。 環境等 win 10 python2.x python lib: json python lib: re JSONデータを辞書型に変換する まず、例として以下のパラメーターでeverykey_ckのアカウントのタイムラインから最新の2件のデータを取得してみます。 今$reqの中には以下の2件のツイートの情報が入っているはずです。 1件目が文字のみの自分のツイート、2件目が4枚の画像が添付されているフォロイーのツイートです。 $reqの中に確かにデータは入っていますがこのままでは読むことできません。 pythonで処理できるようにloads関数を使って辞書型に変換します。 #JSONを辞書型に変換 loads関数で$reqの中身を辞書型に変換し$timelineに格納します。 #中身を確認 画像を保存するプログラムでは必要ありませんが、ここでは試しに変換した中身をのぞいてみます。 json.dumps()を使うことで簡単にインデント付きに整形された中身を出力することができます。 実際の出力結果に注釈を加えたものが以下です。 「XXX」はフォロイーの個人情報を私が置き換えたものです。長いです。 #ツイート本文 日本語や韓国語の場合、unicode文字列がエスケープされて格納されています。 一見して内容を確認することができません。 ちょっと見てみたいときは、http://0xcc.net/jsescape/で、エスケープされた文字列を「\uXXXX」の欄に貼り付けると、元の文字列を確認することができます。 #user情報 trim_user:trueに設定したため、ここではidのみの情報しかありません。 ツイートしたユーザーの@xxxx(数字ではないもの)を取得したいとき等はfalseにして全ユーザー情報を取得する必要があります。 falseにすると”user”: { (略) }部分が以下のような長いものに入れかわります。 必要なデータを取り出す それでは、このデータから必要なデータを取り出してみます。 各要素へのアクセスの仕方は通常の辞書型配列と同じです。上のレスポンスを見て取り出したい要素の階層とキーを確認してください。 取り出したデータは、画像DLの処理に入る前にDLが必要なツイートとそうでないツイートを選別するために使います。 ここでは、以下のツイートを排除対象として、1件ずつ、排除対象に該当しないかを見ていきます。 添付ファイルのないツイート 日付記載のないツイート if条件に当てはまったツイートは、その時点でcontinueによって処理を終了し、次のツイートの処理に入ります。 全てのif条件に当てはまらなかったツイートだけにDL処理を行います。 取り出すデータと条件設定によってかなり自由に添付を保存するツイートの選別を行えると思います。 次のエントリでは、添付ファイルをローカルにDLする処理を行います。

{Python}自分のTLの画像を保存する(1)

(結果的に、現状、)FlickrグループEveryday-Everykeyでの画像収集機能の核になっている「ツイッターの自分のTLの画像を収集する方法」について書きます。 環境等 win 10 pyhon2.x python lib: requests_oauthlib   TwitterAPIへの接続 TwitterAPIの利用には、対象アカウントでTwitterのDeveloperページからアプリ登録をして、以下の4つを取得する必要があります。アプリ登録についてはたくさん説明がされていると思うのでググってください。 Consumer Key Consumer Secret Access Token Access Token Secret 以下、この4キーを取得したとして進めます。 APIを利用するにはこのキーを使ってTwitterのOAuth認証が必要ですが、結構めんどくさいらしいので、ここではrequests-oauthlibというライブラリを使います。 すると、以下のように簡単にアクセスすることができます。 #取得したキーを定義 <your Consumer Key>,<your Consumer Secret>,<your Access Token>,<your Access Token Secret>を先ほど取得したキーに置き換えてください。 #OAuth認証 ここでライブラリを使って認証しています。 初回はアプリ連携時によく見る、あのツイッターの認証画面がブラウザに表示されるはずですので、指示にしたがって認証してください。 #APIのURLを定義 ここでアクセスするURLを設定します。どの情報を取得したいかによりURLが変わります。ここでは「GET statuses/home_timeline」というリクエストを送ってtimelineを取得したいので、TwitterAPI referenceの該当ページ、Resource URLに記載の通り、「https://api.twitter.com/1.1/statuses/home_timeline.json」と定義します。 #parameterを定義 リクエストの際に送るパラメーターの配列をここで定義します。 パラメーターは以下の通りです。適宜入力します。 GET statuses/home_timelineのパラメーター一覧 名前 必須 説明 初期値 count – 1度に取得する件数 20… Continue Reading {Python}自分のTLの画像を保存する(1)