gdk48総選挙の裏側
DESCRIPTION
TRANSCRIPT
GDK48総選挙の裏側
2011年11月22日火曜日
自己紹介
•運営レンジャー イエロー
2011年11月22日火曜日
運営レンジャー
2011年11月22日火曜日
GDK48総選挙アプリ
2011年11月22日火曜日
仕様
•#gdk48かつGistのURLがあるTweetを集める
•集めたGistを一覧する
•Twitter認証したユーザがGistに投票できる
2011年11月22日火曜日
Tweetを集める
2011年11月22日火曜日
一覧する
2011年11月22日火曜日
投票する
Twitterアカウントでログイン
ログインすると投票できる
2011年11月22日火曜日
アーキテクチャ
•Grails 1.3.7•Amazon EC2
2011年11月22日火曜日
使ったプラグイン
$ grails list-plugins -installed
Plug-ins you currently have installed are listed below:-------------------------------------------------------------
blueprint 1.0.2 -- Blueprint CSS frameworkhibernate 1.3.7 -- Hibernate for Grailsjquery 1.6.1.1 -- JQuery for Grailsquartz 0.4.2 -- This plugin adds Quartz job schedulingresources 1.1.1 -- Resourcesspring-security-core 1.2.4 -- Spring Security Core Pluginspring-security-twitter 0.3.4 -- Twitter authentication for Springtomcat 1.3.7 -- Apache Tomcat plugin for Grails
2011年11月22日火曜日
ボリューム$ grails stats
+----------------------+-------+-------+ ¦ Name ¦ Files ¦ LOC ¦ +----------------------+-------+-------+ ¦ Controllers ¦ 5 ¦ 141 ¦ ¦ Domain Classes ¦ 6 ¦ 113 ¦ ¦ Jobs ¦ 1 ¦ 44 ¦ ¦ Unit Tests ¦ 5 ¦ 102 ¦ +----------------------+-------+-------+ ¦ Totals ¦ 17 ¦ 400 ¦ +----------------------+-------+-------+
2011年11月22日火曜日
ツイートを取ってくる
•Quartzプラグインを使って1分おきにTwitter検索 (q=#gdk48)
•検索結果のツイートにGistのURLが含まれるか?
•短縮URLの問題
2011年11月22日火曜日
短縮URLを展開
•java.net.URL使ってヘッダだけ取得
•Locationヘッダの値を見る
•GistへのURLか? さらに短縮URLか?
2011年11月22日火曜日
/** * URLからGistの番号を取得。 * URLがGistのURLじゃなかったらnullを返す。 */private Long getGistNo(String url, tryCount = 0) { if (tryCount >= MAX_TRY) { return null } def m = url =̃ GIST_URL if (m) { return m[0][1].toLong() } else { def conn = new URL(url).openConnection() conn.followRedirects = false def location = conn.getHeaderField('Location') return location ? getGistNo(location, ++tryCount) : null }}
2011年11月22日火曜日
Twitter認証$ grails install-plugin spring-security-core$ grails s2-quickstart$ grails install-plugin spring-security-twitter$ grails s2-init-twitter
コマンド4つでほぼ完了!
<twitterAuth:button/>
2011年11月22日火曜日
Gist連携
•Gistコード表示
•Description表示
2011年11月22日火曜日
Gistコード表示
2011年11月22日火曜日
Gistコード表示
2011年11月22日火曜日
scriptタグだけ
<script src="https://gist.github.com/1197737.js"></script>
2011年11月22日火曜日
Description表示
scriptタグ埋め込みでは表示されない!
2011年11月22日火曜日
Description表示
scriptタグ埋め込みでは表示されない!
2011年11月22日火曜日
Gist API v3
•http://developer.github.com/v3/
•Gistの情報を取得できるAPI
$ curl https://api.github.com/gists/1341145{ "description": "クソゲーによる自己紹介(by uehaj)", "created_at": "2011-11-05T05:26:07Z", "forks": [
], ...}
2011年11月22日火曜日
これで勝つる
•Gist APIを使ってDescriptionをDBに登録しておけばいい。
2011年11月22日火曜日
https://api.github.com/robots.txt
User-agent: GooglebotDisallow: /tarball/Disallow: /zipball/...User-agent: msnbotDisallow: /tarball/Disallow: /zipball/...User-agent: *Disallow: /
2011年11月22日火曜日
ウェブサイトの所有者がボットに対して指示したい場合、そのウェブサイトの階層のルートに robots.txt というテキストファイルを置く(例えば、www.example.com/robots.txt)。サイト側の指示に従う選択をしているボットは、まずこのファイルにアクセスし、その指示を読み込んで、それに従ってそのウェブサイトの他のファイルの読み込みを行う。このファイルがない場合、ボットはそのサイトの所有者が特に何も指示していないと判断する。
robots.txt はボットに対して特定のファイルやディレクトリを検索しないよう指示する。これは例えば、検索エンジンからプライバシー
に関わる情報を守る場合、指定したファイルやディレクトリの内容がサイトの分類をする際に誤解を与える虞がある場合、特定のアプリケーションのみが読み込むことを意図したデータの場合などがある。
下位ドメインがあるウェブサイトでは、各下位ドメインごとに robots.txt ファイルが必要である。example.com に
robots.txt があっても、a.example.com になければ、example.com の robots.txt の内容は a.example.com には適用されない。
Robots Exclusion Standard
http://ja.wikipedia.org/wiki/Robots_Exclusion_Standard
2011年11月22日火曜日
Gist API + JSONP
•JSONPでクライアントからゴニョゴニョすれば合法
2011年11月22日火曜日
// HTML<span id="desc-1197737" class="description"></span>
// JavaScript$(function() { $('.description').each(function() { var span = $(this) var gistNo = span.attr('id').match(/desc-(\d+)/)[1] $.getJSON( 'https://api.github.com/gists/'+gistNo+'?callback=?', function(resp) { var description = resp.data.description ¦¦ '<No description>' if (resp.data.user) { description += ' (by '+resp.data.user.login+')' } span.text(description) } ) })})
2011年11月22日火曜日
2011年11月22日火曜日
感想
•CSSに時間がかかった。
•あのデザインでも自分の中では頑張った方
•困ったときのEC2
•PaaSよりIaaSの方が素直
•Grailsプラグインはチート杉
2011年11月22日火曜日
参考情報•関谷さんの企画書
•http://www.slideshare.net/kazuchika/gdk48•GDK48•http://bit.ly/gdk48•GDK48ソースコード
•http://git.io/gdk482011年11月22日火曜日