春は別れと出会いの季節、皆様いかがお過ごしでしょうか。
ブログ記事って、埋もれますよね。
どんなにいい記事でも、時間が経つと忘れられてしまいますよね。
ブログ書いて、最初はぐいっと閲覧数が増えるのですが、次の日になるともう沈黙の要塞。(僕だけか?)
週末とか月末に、今週のPOST一覧はこちら!とか今月のPOST一覧はこちら! みたいな感じでTwitterかなんかに自動POSTしてくれる、 「シャノン技術ブログBOT」みたいなやつがいたらいいなと思っておりました。
そうすれば更新された瞬間は見逃しちゃった人でも後から 「お。こんな記事あったのか。」とか「そういえば、これいい記事だったな。」 みたいになるんじゃないかなと。
また本技術ブログの広報にも、一役買えるんじゃないかなと思いました。
で、BloggerってAPIもあるみたいだから、それ自分で作れるんじゃね?
実際できんのかな、ちょっと試しにやってみようかなーと思ったのが今回のいきさつです。
言語はScalaで、Playframework2.1を使ってごにょごにょしてみました。
今回のゴールはブログの記事一覧を取得して、それをTwitterに自動POSTする、ってとこを目標にします。
必要なものは以下の3つ。
1.Googleのアカウント(僕はGoogleのアカウントと連動させてます) 2.BloggerAPI(ここの中に入ってます。あとここからダウンロードしたJARも入れておいてください。Javaだと必要なかったけど、Scalaだとこれがないと動かなかったんで。。。)
3.Twitter4j(ここからダウンロードしてください。)
今回はblogger API v2を選択しました。
v3(一つ新しいバージョン)でもよかったのですが、v3だとアプリケーションの認証キーを発行しないといけなくて、若干めんどうだったので。。。すいません。
まずは、bloggerAPIを使って、特定の期間に投稿されたブログ記事の一覧を取得します。
以下のように記述しました。
まず、ここでユーザの認証をします。
アプリケーション名はなんでもいいと思います。
サービス名はbloggerにしてください。
val gs : GoogleService = new GoogleService("サービス名, "アプリケーションの名前"); gs.setUserCredentials("Googleアカウントのメールアドレス", "Googleアカウントのパスワード");
リクエストを送信するURLを作ります。
記事一覧を取得するので、「/posts/default」を指定します。
val blogID : String = "ブログID"; val feedUrl : URL = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
記事を取得する期間を設定します。
今回は「今週POSTされた記事一覧」を取得してみようと思います。
val min : DateTime = new DateTime(new org.joda.time.DateTime().minusDays(7).toDate()); val max : DateTime = new DateTime(new org.joda.time.DateTime().toDate()); val myQuery : Query = new Query(feedUrl); myQuery.setPublishedMin(min); myQuery.setPublishedMax(max);
で、実際にコールします。
val resultFeed : Feed = gs.query(myQuery, classOf[Feed]);
記事が存在すればここでmessageに格納してあげます。
ちなみに期間指定で記事取得すると下書きまで取ってきちゃうみたいです。
下書きには外からのURLがないんで、URLがあればポスト済みの記事として見るようにしています。
var message : String = ""; message += "今週更新された記事はこちらです。"; for (i <- 0 to resultFeed.getEntries().size()-1) { val entry : Entry = resultFeed.getEntries().get(i); if (entry.getHtmlLink() != null) { message += entry.getTitle().getPlainText()+"\n"+entry.getHtmlLink().getHref()+"\n"; } }
と、ブログから記事を取得するところでした。
見ていただくとわかるのですが、完全にJavaです。本当にありがとうございました。
まじひどい。ぜんぜんScalaでやる意味なし。。。もっとたくさん書いて勉強します。
以下はTwitterにPOSTする部分です。
Twitterでつぶやかせるためには、TwitterDevelopers(https://dev.twitter.com)に登録してあげないといけません。
登録すれば以下のキー情報を発行できますので、それぞれ入力してあげてください。
val cb : ConfigurationBuilder = new ConfigurationBuilder(); cb.setDebugEnabled(true); cb.setOAuthConsumerKey(""); cb.setOAuthConsumerSecret(""); cb.setOAuthAccessToken(""); cb.setOAuthAccessTokenSecret(""); val twitter : Twitter = new TwitterFactory(cb.build()).getInstance(); twitter.updateStatus(message);
これで、終わりです。
かなり雑な説明になってしまいましたが、これで記事取得→TwitterにPOSTってとこまでいけるようになっています。
あとはこいつをcronか何かで回してあげれば、完了です。
今はまだ試作段階なのですが、ちゃんとアカウント作成して、シャノン技術ブログbotとして公開できればな、と思っております。
これで自分のみならず、みんなのブログ記事がさらにたくさんの人たちの目に触れるようになってくれれば、幸いです。
では!