Contenu connexe
Similaire à GDK48総選挙の裏側 (20)
Plus de Kiyotaka Oku (20)
GDK48総選挙の裏側
- 2. 自己紹介
•運営レンジャー イエロー
2011年11月22日火曜日
- 5. 仕様
•#gdk48かつGistのURLがあるTweetを集める
•集めたGistを一覧する
•Twitter認証したユーザがGistに投票できる
2011年11月22日火曜日
- 9. アーキテクチャ
•Grails 1.3.7
•Amazon EC2
2011年11月22日火曜日
- 10. 使ったプラグイン
$ grails list-plugins -installed
Plug-ins you currently have installed are listed below:
-------------------------------------------------------------
blueprint 1.0.2 -- Blueprint CSS framework
hibernate 1.3.7 -- Hibernate for Grails
jquery 1.6.1.1 -- JQuery for Grails
quartz 0.4.2 -- This plugin adds Quartz job scheduling
resources 1.1.1 -- Resources
spring-security-core 1.2.4 -- Spring Security Core Plugin
spring-security-twitter 0.3.4 -- Twitter authentication for Spring
tomcat 1.3.7 -- Apache Tomcat plugin for Grails
2011年11月22日火曜日
- 11. ボリューム
$ 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日火曜日
- 12. ツイートを取ってくる
•Quartzプラグインを使って1分おきに
Twitter検索 (q=#gdk48)
•検索結果のツイートにGistのURLが含まれ
るか?
•短縮URLの問題
2011年11月22日火曜日
- 13. 短縮URLを展開
•java.net.URL使ってヘッダだけ取得
•Locationヘッダの値を見る
•GistへのURLか? さらに短縮URLか?
2011年11月22日火曜日
- 14. /**
* 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日火曜日
- 15. 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日火曜日
- 16. Gist連携
•Gistコード表示
•Description表示
2011年11月22日火曜日
- 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日火曜日
- 23. これで勝つる
•Gist APIを使ってDescriptionをDBに登録
しておけばいい。
2011年11月22日火曜日
- 24. https://api.github.com/robots.txt
User-agent: Googlebot
Disallow: /tarball/
Disallow: /zipball/
...
User-agent: msnbot
Disallow: /tarball/
Disallow: /zipball/
...
User-agent: *
Disallow: /
2011年11月22日火曜日
- 25. Robots Exclusion Standard
ウェブサイトの所有者がボットに対して指示したい場合、そのウェブサイトの階層のルートに 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 には適用されな
い。
http://ja.wikipedia.org/wiki/Robots_Exclusion_Standard
2011年11月22日火曜日
- 26. Gist API + JSONP
•JSONPでクライアントからゴニョゴニョ
すれば合法
2011年11月22日火曜日
- 27. // 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日火曜日
- 29. 感想
•CSSに時間がかかった。
•あのデザインでも自分の中では頑張った方
•困ったときのEC2
•PaaSよりIaaSの方が素直
•Grailsプラグインはチート杉
2011年11月22日火曜日
- 30. 参考情報
•関谷さんの企画書
•http://www.slideshare.net/kazuchika/gdk48
•GDK48
•http://bit.ly/gdk48
•GDK48ソースコード
•http://git.io/gdk48
2011年11月22日火曜日