mixi Graph APIを使ったサービスの作り方(Perl, Catalyst, AmzonEC2)

mixi Graph APIjQuery Mobile と Perl で 「話題のつぶやきTop10」というのを作った。
ソースも公開。バグあったらごめんなさい。脆弱性あったらこっそり教えてください。

記事は書きかけ

■この記事の目的
大学の授業で「ポインター」や「ハノイの塔」とかやっててもつまらないので、
「Webってこんなコトできるよ」って研究室の後輩に伝えるために書いてみる。
Webの世界を創るの面白いです!


■前提条件
・root権限のあるサーバ1つ
 ・AmzonEC2やさくらVPSをオススメ
mixi Graph APIのアカウントを取得
※AmazonEC2のセットアップやmixi Graph APIの登録方法は調べてください。

■作り方
サーバがセットアップされている状態で、以下の手順に従えば mixi Graph APIを使って「話題のつぶやきTop10」を再現できるはず。
プログラムの初歩は人のソースを参考にどんどんいじることなので、コメントやトラックバックで「つくレポ」あると嬉しいです。

(1)Perlのモジュールを入れやすくするためにcpanm 入れる
参考:モダンな Perl の開発環境の構築方法

curl -L http://cpanmin.us/ | perl - App::cpanminus


(2)Perl MVCフレームワークであるCatalystを入れる。Starmanで動かす。

参考:最速セットアップ案内 Catalyst on Starman
※上記を参考に作ったので、Catalystのプロジェクト名がYellowCatなままです。今度直します。

参考:BESTGAMEONの作り方トップ
※上記サイト、神レベルにCatalystが分かりやすい。ここまで整理して公開してくれているのはとても尊敬です。見習いたい。

cpanm Catalyst Catalyst::Devel
cpanm Module::Install::ReadmeMarkdownFromPod Plack Catalyst::Engine::PSGI Starman Server::Starter Net::Server::SS::PreFork
cpanm install Catalyst::View::JSON Catalyst::Helper::View::TT
cpanm install Plack::Middleware::Expires Plack::Middleware::Static
cpanm Catalyst::Plugin::HTML::Scrubber;

# アプリケーションフレーム作成
catalyst.pl YellowCat

# サーバ設定ファイル作成
./script/yellowcat_create.pl PSGI

# サーバ起動
start_server --port 8080 -- starman --workers 5 ./script/yellowcat.psgi
# http://自分のサーバ:8080/で表示されるか確認

# View作成
script/hello_create.pl view HTML TT
script/hello_create.pl view JSON JSON

starmanCatalystについて参考:Modern Perl Web Development on Amazon EC2


(3)セッション管理用にmemcachedを入れる

cpanm install Cache::Memcached::Fast
cpanm install Catalyst::Plugin::Cache::Memcached::Fast
cpanm install Catalyst::Plugin::Session::Store::Memcached::Fast
cpanm install Catalyst::Plugin::Session::State::Cookie

# 起動する
sudo /usr/bin/memcached -p 11211 -u nobody -m 124 -c 1024
# -c 接続数
# -m メモリ

(4)mixi Graph API を使うための Perl ライブラリ(use Any::Moose)を入れる

cpanm install Any::Moose
cpanm install Exception::Class
cpanm install URI::Encode
cpanm install HTTP::Request::StreamingUpload
cpanm install JSON URI URI::QueryParam LWP::UserAgent

#Open SSL
http://www.openssl.org
sudo yum install openssl
sudo yum install openssl-devel
sudo yum install perl-Crypt-SSLeay

(5) mixi Graph APIの自家製ライブラリ落とす
https://github.com/KazukiTanaka/WWW--Mixi--Graph

(6) emerges.toのソース落とす
https://github.com/KazukiTanaka/MixiVoiceTopic

記事は書きかけ
→話題のつぶやきを起動できるように手順をしっかり書く


■メモ
jQuery Mobileの説明色々

jQuery Mobile 基本編
1時間で携帯サイトをスマートフォン対応にする方法 | GREE Engineers' Blog
jQuery Mobile いいネ Index
なんとなく:jQuery適当メモ


starman起動

sudo ~/perl5/perlbrew/perls/perl-5.12.2/bin/start_server --port=80 --signal-on-hup=SIGHUP -- ~/perl5/perlbrew/perls/perl-5.12.2/bin/starman --workers 1 ~/web/YellowCat/script/yellowcat.psgi

suversionでコミット時(post-commit)にTwitterでつぶやくスクリプト(文字化け注意)

ネタで、subversionコミットメッセージに「なう」が含まれてたら、Twitterにつぶやくpost-commitスクリプト。動かない場合にはユーザ権限やファイル所有者を疑ってみてください。また、svnlook logの出力が激しく文字化けるので、注意。
実行環境は、CentOS5.4のutf-8環境。

vim post-commit

#!/bin/sh

REPOS="$1"
REV="$2"
export LANG=ja_JP.UTF-8

LOG=`svnlook log -r $REV $REPOS`
/usr/local/bin/perl /home/svn/mymaga1/hooks/commit_twit.pl id:twitterID書く PASS:パスワード書く $LOG

chmod 755 post-commit
あと、chown する

コミットログを受け取り、つぶやくPerlスクリプト
vim commit_twit.pl

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use WWW::Mechanize;
use Encode;
#use utf8;
#$ENV{'LANG'} = 'ja_JP.utf8';
my $username = shift;
my $password = shift;
my $twit = shift;
my $mech = new WWW::Mechanize;
#$twit = encode_utf8($twit);
exit(1) unless ($twit =~ m/なう/);
$mech->get('http://twitter.com/');
$mech->submit_form(
form_number => 1,
fields => {
'session[username_or_email]' => $username,
'session[password]' => $password,
},
);

$mech->get("http://twitter.com/$username");
#ログイン判定:ログアウトボタンがあるかどうか
unless ($mech->content =~ m!a id="sign_out_link" href="/logout"!){
print $mech->content;
print "login error\n";
exit(1);
}

# ログイン後につぶやく
$mech->get("http://twitter.com/");
$mech->form_id('status_update_form');
$mech->field( 'status', decode_utf8($twit) );
$mech->click();

#binmode STDOUT, ":utf8";
#print $mech->content;

exit(1);

chmod 755 commit_twit.pl
あと、chown する