Category Archives: programming

Trying to use API of Google Analytics

I use the GUI the page view and the number of hit that we have confirmed, and it can also be checked using the Google’s API. Let’s try to use the API Client Library for Ruby. Well, what would you do? Please look at this web site. Googleアナリティクスのレポートをrubyから取得する http://blog.naberon.jp/post/2013/08/25/google-analytics-api/ ※ translate.google : Get a Google Analytics report from ruby It is roughly like this! you terribly sloppy. more seriously. OK. Please let me add a few information. I will try require. I’ll prepare a client_secrets.json for Librarie. make a Instance. Authenticate. make a requests parameters. ※Parameter Look here https://developers.google.com/apis-explorer/?hl=ja#p/analytics/v3/ something like that… Oops. One more thing. On the GUI, the […]

CUI環境でCapybaraを使うときのあれこれ

04/28ちょこっと追記と数カ所修正しました。 What’s that? Capybaraはウェブシステムのテストを補助するRubyのライブラリです。 Mechanizeでほとんどのサイトはクロールできますが、JavaScriptなサイトに対してはJavaScriptが解釈できるようなものでクロールしないといけません。 とくに真新しい単語が入っている訳でもなく、これを読んだだけだと別に何もピンと来たりはしないかもしれない。 GUI環境なのかCUI環境なのかという問題は、それと同じくらい普段は意識しないことだと思いますが、何も明記していない場合はGUI環境なんだよ〜というのは、もしかすると初めてだったかもしれないくらい。 今回はわりと大きな問題だったようです。 インストール 参考サイト github.com/thoughtbot/capybara-webkit CapybaraとCapybara-webkitというものをインストールします。 Gemでインストール可能ですが、Capybara-webkitのインストールにはQT(キュート)というものが必要なようで、まずはそこから。 Capybara-webkitはCapybaraが利用するドライバーのうちの1つで、他にもRackTest、Poltergeist、Selenium などがあります。 参考書籍だとPoltergeist+PhantomJSが人気らしく、書籍の中でもこの組み合わせでの説明になってます。ウェブの情報もそれなりに多いCapybara-webkitで進めてみたいと思います。 その辺りは置き換えて読んでいく必要がありますが、まぁ何とかなります。 では、参考サイトとCapybara-webkitのインストールに戻りませう。 ザーッとマニュアルと読んでみると、その時に使っていたOSがCentos6だったのでRHELのところが目についた。 ってことで という感じに、あまり深く考えずにRHEL16のところで進めていくと。 っつーか、これだとダメみたい。 Capybara-webkitのインストールは失敗しました。 と出ます。 この件から得る教訓は、急がば回れということらしい。 気を取り直してCent6の手順でインストール RHELのところから下に下がって良く見てみるとCentos6の手順がちゃんと書いてありました。 この辺は参考サイトと同じです。 選択肢の部分は参考サイトから少し変わった様子? さきほどの教訓がぜんぜん活かされていない気がしますが、Yesを選択してみました。 しばらく待っていると以下のメッセージが表示されました。どうやら残りは普通に同じように進められそうですね。 あとはgmakeでフィニッシュ。 なんですが、Gmakeがめちゃ長いので時間がない時は避けておくのをオススメ。 できた〜!と思ったら? 簡単なテストスクリプトを実行してみると ここでようやく参考にしていたサイト全てがGUI環境を前提にしていたことに気づいた。 ・・・なんということでしょう。 CUIの場合はHeadlessとXvfbが必要ということらしい。 本来?という言い方はおかしいですが、本来はウェブサイトのテストに使ってたものらしいので、GUIを前提としていてもおかしくないのかなぁと振り返ってみるとそう思ったりして。 エラー内容が変わる。 どうにもこうにもX環境がない場合は、Xvfbとやらを使えということらしい。 Headlessという単語は以前にも見覚えがあり Vagrant+VirtualBoxとpackerで検証環境を作ろう VirtualBoxのテストでCUIだけで操作したいときはHeadless=Trueというオプションを使っていました。そんな感じということですね。 ではスクリプトを使ってテストしてみます Googleに接続して画面キャプチャを取るだけのスクリプトです。 無事に動作したようです。 ではサイバーダック君を使って、サーバーとSFTPで繋いでDLしてチェックしてみませう。 04/28追記ここから 今回はこれで終わろうと思いましたが、2回に分けようと思っていた事がそれほど大きくなさげなので一緒にしてしまいます。 DSLタイプとインスタンスメソッドタイプ 使えるメソッドは同じなようで少し違っているみたいですが、細かいとこは置いておいて視覚的にはDSLの方が綺麗かな? 参考書籍のAmazonのサンプルを参考にしてCapybara-webkitの場合で、DSLを使ったタイプとインスタンスメソッドを使った2タイプで書いてみました。 最初に両方やってみてDSLの方が良さそうなのでこの後はずっとDSLで進めています。書籍もDSLですしね。こちらはCapybara-webkitで進めているとこもそれほど気にならないで進めれています。 インスタンスメソッドを使ったケース DSLを使ったケース Xpathなんかも使ってスクレイピングできるようなので、Mechanizeで蓄えていたことも使えそうですね。 全く関係ない話ですが 今回からKobitoを使って下書きしてマークダウン式にしてみました。 参考書籍 Rubyによるクローラー開発技法 佐々木拓郎 るびきち 著 ソフトバンククリエイティブ

Ruby関連の記事へのアクセスが少ない件でロジックツリーを作ってみた

新しい事を知ったら使ってみたくなるじゃない? にんげんだもの たけお GPDCAってものもあるらしいけれど、まずはこっちだ。 ロジックツリーのこれはWhyツリーというものの(つもり)です。ギャグ要素も含みつつそれなりにちゃんと考えつつ、Excelで作ってみました。テーマは何でも良かったんだけれど、多少悩んでいたことなので。 Ruby関連の記事へのアクセスが少ない件 です。 8個の問題が出来たので1個ずつ考えてみます。 Ruby力がない Ruby力(ちから)がない。のはまだまだ上げていくつもりなのですが、Ruby力がつけばアクセス数があがるか?というと必ずしもそうではないだろうと思います。ただRuby力っていうとアクセス数ってものに関係なく、これから色々やっていく上で必要なものなので、この辺の事はあまり考えずに次いってみよう〜。 題材が良くない これは大きな問題のような気がします。今までTwitter、メンテナンス情報、Redmine、Zabbixなどなどやってきましたが、どれもサンプルを使って試してみましたってレベルのものばかり。やっとこさ使えるようになりました〜!という報告が評価されないのはそりゃそうだってもんだ。 ただ、何番煎じだ〜と思えるような内容でも、ユニークなものであればそれは評価も高いんだな。 このテーマはなかなか奥が深いのだな。 題材はさておき中身もチラ裏程度なので、その辺を意識した方がいいかもしれない。 書き込みが足りない 書き込み*センス=熟練度 であるからして、こればっかりはひたすら書くしかないんだぜ。ヘイヘイ。 ドキュメントを見て書くことが少ない ドキュメントを見て書くことが少ないと付けましたが、次の問題点の「まずGoogle検索という思考プロセス」と話がかぶっているので、ドキュメントを見る機会が少ない > 慣れない > 余計に見ない > 慣れない。というスパイラルというテーマで考えます。 こればっかりはひたすら読むしかないんだぜ。ヘイヘイ。でまた片付けられてしまいそうですが、流石に私の中の正義というものが許さないです。崖っぷちまで追い込まれてですが。 だってGoogle検索でだいたいの答えが出るんだもん! というのが理由の中の大きな1つではあります。しかし、Google検索で解決しない。または解決までに時間がかかる問題にぶち当たった時に、ドキュメントやマニュアルに慣れていないと解決までの時間がかかってしまいますのです。 趣旨はずれますが、コードリーディングもその辺の問題点を抱えることになります。 個人の遊びレベルを超えたいなら、この辺のスキルは必須だろうなぁ。 まずGoogle検索という思考プロセス。 これは決して悪いことではないと思うものの、あまり良くないと思う気持ちも半分ほど。 何でもかんでもGoogle検索していると、それは昔々の教えて君に限りなく近い存在なんじゃないかと思ったりもする。Google師匠が何でも答えているのと同じに思えるからね。 Googleを使うべき問題と、ドキュメントを読むべき問題、自分で解答を作るべき問題を明確にすると解決できる問題だと思う。 そもそも書いているスクリプトの数が少ない。 うーん。これは記事の数ってことにすると、それだとPythonの記事にはそれなりのアクセス数があるので、サンプルコードの利用が多いという問題に対するWhyになっていない。 書いた数が少ないから、それによりRuby力がないという問題があったとしても、Pythonの件があるのでWhyになっていないですね。これはミステイクです。 Pythonの記事は2・3個くらいしかありませんが、検索上位にくるキーワードもあるので、検索ワードに対して良い内容になっているんでしょう。 日本語環境ではRubyの記事のほうが圧倒的に多いってことも関係しそうだけどね。 SEOを知らない 知らないですが、あまり知りたいという気持ちも少なくて、たまーに関連記事を読む程度。仕事で必要にでもならない限りガッツリ取り組むことはなさそうですが、アクセス数を上げたいんだったら学ぶべき事でもあるんだよね。ぐふぅ。 っていうかSEOの勉強をしてない ええ、していませんよ。 気が向いたらやりますよ〜だ! まとめ 一応は取り組むべき問題は見えたので、それなりの効果を上げることができたと思います。優先順位を付けてガッツリと半期ごとのスケジューリングしてってことまでは流石にやらないですが、伸び伸びと進めていこうかなと。

OAuthでTwitterAPIのSearch、Trend、Postを利用するスクリプト

ちょいと昔話 2次元の話ではなくてリアルな話で、学生時代にプログラミングセンスの塊のような人を見ていたので、自身の成長速度がいまいちな事も納得しているし、多くを求めてはいないのだけれど、やはりなかなか上手くスクリプトが書けないでいると正直しんどかったりする(´ω`)‥トホー こないだの村上さんのところで、文章はとにかく練習です。という話があり、プログラミングも言語だし通じるところはあるよなぁと思ったり。村上春樹さんの作品は本当の戦争の話をしようしか読んだ事がなく、その作品も訳者としてのものなので原作はまだ読んだ事がなかった。積み本がまだ幾らか残っているので次回の周期にでも手を出そうかな。ε-(/・ω・)/ 中田英さんと対談してたよなぁってそれは村上龍さんだったんだね。つい最近まで勘違いしていたのはちょっと内緒の話だ。Σ(・ω・;||| 今回はOAuth 最近はMechanizeばかりだったので、WebAPIを使うのは久しぶり。Mechanizeも認証は可能だけれどTwitterAPIを利用するので認証をOAuthで済ませてメソッドで分けようという魂胆です。 initializeはインスタンスを作ったときに必ず実行される部分になります。ここで認証します。initializeの意味的には初期化ということでした。 昔さくらのクラウドのAPIを題材にしたときに、自分のキーをウェブに吊るすという大チョンボをやらかして若干トラウマなので、ソースコードは最後にまとめて載せますw 即再発行したのでキャッシュがどこかに残っていても大丈夫です。 作成したメソッドは3種類 ・ワード検索のgetword ・トレンド検索のtrend ・ポストのwordpost 機能はそのままで、いろいろ作りこむためのひな形ようにしているつもりです。 mainのメソッドで選択する形をとっているのですが、一人でやっているとこの辺をどうしたらいいのかなかなかうまくまとまらないですね。 参考サイト RubyでTwitterAPIを叩いてみたら彼女が… | Septeni Engineers’ Blog | セプテーニ エンジニアブログ: Trendはほぼそのままになっています…Σ(・ω・;||| ソース ソースです。※なぜかインデントが…(ω・`))(´・ω・`)(( ´・ω) いま実行するとこんな結果に。 getword trend POST は省略して実験でPOSTしたのを。 書き込みテスト — たけけん (@TakekenTw) 2015, 3月 11 まとめ GUIが苦手なので、ひとまずCUIで基本を作ってからGUIに移行させつつ。という戦略をとろうかと思っています。

Mechanizeでスクレイピング!JSONデータを出力!

ワックスかける!ワックスとる! ベストキッドという映画をご存知でしょうか。 有名な映画なのでご存知の方も多いでしょう。主人公の男の子が、ミヤギから空手を教わる時にいろいろな修行をするのですが、その中でも有名なのが ワックスかける!ワックスとる! というものがあります。このフレーズだけ知ってる!という人も居るかもしれませんね。 ひたすらこのワックスかける!ワックスとる!という動作を繰り返す修行(だったと思う)なのですが、この動作を繰り返しているうちに気づいたら空手が強くなってる!という話でした。 プログラムもある程度のレベルまではひたすら書いていると上達すると思うので、ベストキッドのように反復練習もいいのではないかな?と思ってこのタイトルにしてみました。 スクレイピングする! JSONで出す! Mechanizeを使わない方法やループの方法も色々とありますので、いろんな方法で繰り返しているうちに色々と上達するでしょう。たぶん。 ではやってみよう Mechanizeを使ってスクレイピングをするところまでは以前やりましたので、今回はJSONに出すところをやろうかと。 前回のネタ Mechanize+Rubyを使ってみるテスト さくらのメンテ・障害情報を拾ってくる 今回はロリポップもやってみようと思います。 視覚的にもスクレイピングとデータ取得は別にした方が分かりやすいので、情報を取得するクラスと、利用して何かを出力するクラスという形がいいのではないかと思います。 今回は情報を取得するクラスということで。 先に言っておくと内容は意味がないよう〜なもので、お題がメンテナンスや障害情報なので、各ホスティング会社のWebを見たほうがあきらかに良いです。 ガッツリ作りこめばもっとJSONのデータも細かくできそうですが、それなりに手を抜いていますのでその辺はご了承くださし。 これはあくまで練習です。 もう1度繰り返します、これはあくまで練習です。 さくらバージョン 実行結果 ロリポップバージョン コメント欄にも書いていますが、一応それぞれのデータがとれているのですが、改行がされていないのでループでとれているのかどうか謎です。 実行結果 おわりに そもそも反復練習は、Sinatraでのウェブアプリケーションを繰り返していたんですが、データをとるところは別にやってもいいかなと思ってこの部分だけでアップすることにしました。 VPSの環境に近い環境をやっとこさローカル環境にも作って、Windows+Ubuntuで作っていた環境からMacへの移行もようやく終わったので、新しくVPSやOpenstackの作成にもとりかかれるようになりました。出来上がったらまた日記のネタにしようかと思いますのでよろしく。 宣伝 Qiitaに登録したはいいけれど、どう使おうかなぁと悩んでいたところ、プログラム関連で日記に書くには難しいようなネタや、スニペット置き場的に使うのがちょうど良いかなと。 同じ内容で別の言語で書くというのも多分はじめてですが、載せてみたらレスも頂いて、個人的には濃い内容になりました。やっぱりコミュニティは他の方の目につくのが多い分レスもいただけますね。良いことです。 と言っても、このブログとはやはり別物扱いにしていきたいので宣伝だけ!ってことで。 良かったら覗いてみてください。 Ruby – ベンチマークの簡易スクリプト – Qiita: takekentw    

メタプログラミング

Redmineのプラグインやるで!と意気込んでいるものの、とりあえずメタプログラミングとやらの基本をやっておいた方が(・∀・)イイ!とぼくのガイアがささやいた。 だいーぶ昔に書いてたようにRubyの基礎項目は、オライリーのRuby Programing(日本語版)とパーフェクトRubyでじわじわと両サイドから進めている訳だけれど、メタプログラミングに関しては、Ruby Programingの方は全10章中のうちの8章で。パーフェクトRubyの方は全パート5のパート3でやっと登場する。4枚組のゲームDiskだったら3枚目くらいでやっと登場する飛空艇のような感覚だ(今どきDiskが別れているゲームもないだろうから分かりにくいな)。ようするに物語はもう終盤を迎えるところでやっとの登場!ってなわけだ。 さて、コーディングはちょっとくらいはマシになってきているかな?と少しくらい実感はできていても、本来であれば1年くらいかけてじっくりやるような内容を、そんな悠長なことも言っていられないのでサクサクと、止まらなくなったスナック菓子の如く章を進めてしまっているし、一人でばかりスクリプトを書いていると、とんだ井の中の蛙が誕生してしまうだろうし、どうしたもんかね〜と悩んでいても仕方がない事をいつの間にか日記にまで書いてしまっている。意図して日記で公開していても、他人のスクリプトを添削してくれるような超絶親切な方も居ないし、例え居たとしても異常に気を使ってしまいそうだし、その辺はなかなか難しい部分だ。 Qiitaを利用するとマルチポストになってしまうんだ!とクソ真面目な悩みを抱えている人が意外と多いことについ最近びっくりしたところ。そうだ、復習も兼ねてちょこっと前よりも良いプログラムにしたらマルチポストじゃないぜ〜。その方法でQiitaに投稿していこうとか、考えたりもしたけれど、だいたい同じ発想でメールマガジンをやり始めて、マグマグの応募に1回目は落ちて、2回目の投稿でやっと合格になったにも関わらず、1刊だけ発行して、結局なんもやらずで廃刊にしてしまった過去があるので、その辺は勢いだけが取り柄のぼくでも躊躇してしまっている。 まぁまぁ、わざわざ順番通りに進めなくてもメタプログラミングだけ先にやればいいじゃん?と思ったりもするので、ちょこっとやってみようか。 と思ったら、「この章はとくに読まなくてもいいよ。全部終わった後にでもこの章に戻ってきて、この章の内容が理解できたら…なかなかやるじゃな〜い?ということだよ君。」みたいな事が書いてあるではないか!!ふぅ。全く逆の事をやろうとしていた。 大人(先人)の言う事は聞いておいた方がいいよ〜ということを若かりし頃に身を持って経験しているので、ここは素直に従おうじゃないか。 冒頭に話を戻して、メタプログラミングとやらの基本をやっておいた方が(・∀・)イイ!ってのを実践しようとするなら結局は全部終わらせてからな!ということらしい。急がば回れ、回れば分かるさ。  

Mechanize+Rubyを使ってみるテスト さくらのメンテ・障害情報を拾ってくる

Mechanizeを使ってみよう Mechanizeというブラウザのエミュレータのようなライブラリがあり、nokogiriの成分も含んでいるので、スクレイピングにもたまに用いられているクールなライブラリのようです。 ブラウザのというだけの事はあって、フォームへのポストやSSL証明書の取得なんかもできるようです。 機能はいろいろあるけれど ちょこっと使ってみようと思っただけなので、スクレイピングだけやりますw 何やるの タイトルの通り「さくらのメンテ・障害情報」を拾ってこようと思います。 ここですね。   Mechanizeのこと ざっくりと説明をしていきたいと思います。 ライブラリを呼び出して、エージェントを作ります。 ユーザーエージェントの作成。 URLを設定します。後から選択できるように引数にとるようにしました。 all rs vps ss idc と文字列が使えました。 でもってこの辺が通常の?スクレイピングだけのライブラリと違う部分のようで(多分)リンクの要素を選択して、その先のHTMLを引っ張れます。 下のスニペットは、引数で何番目の要素かを取り、そのリンク先のDIVタグのtxt-blockというところのテキストデータを引っ張ります。というものになっています。 この部分はnokogiriのはずです。 要素から空ならぬるぽ(Rubyはnilもオブジェクトですが、お遊びです)、あったら返すという感じ。 色々と調べてみると まずメンテ・障害情報のページは2個に分割されています。 現在発生中の情報(12時間前後) メンテナンス予定の情報 32個目の要素が現在発生中の情報にあたるようです。で、メンテナンス予定の情報の要素までに必ずぬるぽが1回入ります。 それを踏まえると32番目の要素からぬるぽまでループさせれば現在発生中の情報は引っ張ってこれますね。 1個だけ取ってくるケースだと、こんな感じに引っ張ってこれます。<pre>なのでCUIでも、Webのそのままが出るようですね。 [takeken@centos /home/takeken/mainteview]$ ruby view.rb rs 32 メンテナンス・障害情報・機能追加|さくらインターネット公式サポートサイト                                                                                    2015年02月27日掲載                    障  害  発  生  の  お  知  ら  せ                                         さくらインターネット株式会社    平素よりさくらインターネットをご利用いただき、誠にありがとうござ  います。  本日、ご提供サービスにおきまして、以下の通り障害が発生いたしました。  ご利用中のお客様には大変ご迷惑をおかけいたしましたことを深くお詫び  申し上げます。                                 < 記 >    発生日時 : 2015年02月27日03時36分~2015年02月27日04時32分    影響範囲 : さくらのレンタルサーバの一部               ホスト名が下記の範囲のお客様               www212.sakura.ne.jp ~ www216.sakura.ne.jp    障害内容 : サーバに接続できなくなる障害が発生しました。   ———————————————————————    追    記 : 復旧作業が完了しました。                                                                 以上 ソース 上のは企画単体物で、取得部分をループにしました。   テキストだとループの表示が分からないので、現在発生中のものを一括で取ってみたものの一部をキャプチャしました。こんな感じでずらずらと表示されて、最後にぬるぽと出ます。 1回インクリメントを書くのを忘れていて、アタックのようになってしまいました。すみません。 壁紙はなぜベストを尽くさないのかの上田次郎先生です。 こないだ立ち読みした本に書いてあった「作る必要のないものは作らない」という言葉にムムムと考えさせられたので、今回の日記はアップするかどうか悩みました。 いくらMechanizeのテストだからといっても、意味がなさすぎだろうと。 はっきり言って ブックマークしていた方が120%いいと思います!   しかし サーバーが落ちたかな?って時にタタンとそのままCUIで障害情報が出ていないか確認するときには使えるんじゃないか?と思っていたところで www212.sakura.ne.jp […]