× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
毎日いろんな広告の情報を取ってくるのが面倒くさい。
というわけで自動化した。 まず、wgetとかで情報を取得するところからやろうとした。 が、当然認証とかしないと取って来れない。ちょいと面倒くさい。 APIとして用意されてる訳でもない。 htmlを解析する…というのはありえないとして。 csvを取ってくるのが常套だろう。 が、そこはめんどいので、とりあえずcsvをダウンロードするのは手動でいったん妥協。 Rubyスクリプトで、csvを解析して必要な情報だけを取り出す部分を作成する。 RubyにはCSVクラスがあり、若干の癖はあるものの、CSVの読み込み、書き込み、アクセスなどいろいろ便利にやってくれる。 参考 CSVファイルの中身を一気に全部読み込むには
とする。tableはCSV::Tableクラスのインスタンスになり、超便利にデータにアクセスできる。 ただし日本語が取り込めないので、日本人としては使いどころは限定される。 CSVファイルの中身を一行ずつ読み込むには
を使う。rowは配列になる。 エンコードを指定することもできる。 第2に引数に指定。
とすると、Shift_JISのCSVファイルを読み込み、UTF-8に変換して扱うことができる。便利。 ファイル自体の文字コードをUTF-8に変換する場合は
とする。(-w がUTF-8に変換するオプション。 -s だとShift_JIS、-e だとEUC-JPになる) 出力は
となる。 ◯コツ 入力ファイル名はスクリプトの第1引数で指定 出力はファイル名指定でもいいが、そのまま標準出力させたほうが扱いやすいともいえる。 ただ、2重配列をそのまま p data という感じで出力してもcsvファイル形式にはならないので、おとなしく引数で指定しよう ([["2015/07/01", "1000"], ["2015/07/02", "2000"], ... のように、角カッコやダブルクォートがついてしまう) ◯ディレクトリ 広告ごとに各ディレクトリを作成。 中に、同名のスクリプトを置いておく。
各ディレクトリに入って、各社管理画面からダウンロードしてきたcsvを使えば、1社ずつデータを抽出できる。 ◯全部まとめて さて、全社まとめて処理したい。 先ほど作った各社のparse.rbを呼び出す、統括スクリプトとでも呼ぶべきスクリプトを作る。 スクリプトファイル名は同じにしてあるので、topディレクトリで #{ad}/parse.rb を実行すればいい。 ダウンロードしてきたcsvファイルの指定だが、 各社思い思いの名前になっている。 (nendだと、nend_m_20150801_20150804.csv 、imobileだと 日別レポート_20150801-20150804.csv、 admobだとadmob-report.csv など) ダウンロードして、毎回毎回ファイル名を変更するのはごめんだ。 このファイル名のまま実行できるようにしたい。 特定のディレクトリにそのファイル1つだけを入れる、とかすれば
とかでできるが、毎回全csvファイルを別ディレクトリに保存するのもめんどい。 dataディレクトリは1つで、ファイル名を検索するのがよい。 というわけで、
というふうにした。 ls -1 オプションは、ファイルを1行ずつ表示。 ls -r オプションは、ファイル名を降順に表示。最新の日付の入ったファイル名から取得するイメージ。(YYYYMMDDじゃなかったらダメになるものもあるきがするが) gsubは、2行目以降を削除している。 結果出力は #{ad}/output.csv のようにやはり名前を統一しておく。 csvに全部まとめた最終出力を行い、 Numbersで自動で開く。
で、ダブルクリックで実行できるようにするため、 シェルスクリプトからこのRubyスクリプトを呼び出す。
このシェルスクリプトを右クリックし、「このアプリケーションで開く」 で「ターミナル」を指定 これで、Finderでダブルクリックで実行できるようになった。 キモは cd `dirname $0` で、カレントをファイルの場所に移動させたい。 これが必要なので、Rubyスクリプトをダブルクリック実行させてもうまくいかないのだ。 PR |
|