• Like
東京電機大学 ポータルサイトUNIPAからの情報抽出と再利用
Upcoming SlideShare
Loading in...5
×

東京電機大学 ポータルサイト UNIPAからの情報抽出と再利用

  • 5,900 views
Uploaded on

スマートフォン勉強会@関東#20での発表資料です。

スマートフォン勉強会@関東#20での発表資料です。

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
5,900
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
4
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 東京電機大学 ポータルサイトUNIPAからの情報抽出と再利用 @nullpoo 2012/8/25
  • 2. だれ?• 名前:Koki Hashimoto• Twitter :@nullpoo – ぬるぷー• 東京電機大学に通っています• 来年から社畜です• すまべんスタッフになってました
  • 3. はなすこと• UNIPAとは何か、どこがどうダメなのか – 欠陥仕様、事務部の運用• 無知の状態から形になるまでの道のり – 認証や各ページへの遷移 – スクレイピングでゴリゴリと削り出す – フリーダム書式に正規表現の力 – etc• 成果物と活用方法
  • 4. UNIPAとは?• 学生向けポータルサイト• 製品名はUNIVERSAL PASSPORTらしい• http://www.jast-gakuen.com/• ググると被害者リストが出てくる
  • 5. いきさつ• (元)神田キャンパスにUNIPA試験導入 – ものすごく使い勝手が悪い• 神田キャンパス正式導入、一本化 – 使い勝手は変わらず、不具合多数• 他キャンパスにも導入 – 悲しみの連鎖• XMLな講義の課題としてUNIPAを標的に
  • 6. UNIPAのだめなところ
  • 7. ログイン• 新しいウィンドウ開くな• メンテナンスしすぎ• Operaだとabout:blankに飛ばされるぞ
  • 8. 連絡事項• 基本的に通知は無いぞ – 休講補講情報に気づかず出席 – 事務部が機能を無効化• 書式が全く統一されていないぞ – 各詳細ページの「本文」項目のフリーダム感 • やっぱり新しいウィンドウで開く
  • 9. 作るか・・・
  • 10. UNIPAクローラー制作過程
  • 11. 指針• APIとして公開する – 自分でも使いやすく、他の人も使える• とりあえず、休講補講情報を扱う – 事務部からのお知らせなども同じ構造なので 応用は簡単(のはず)• 色々な技術を取り入れる – 正規表現やデータベースなど
  • 12. 開発言語• 最初はC#で作っていた – C#くらいしかまともに使えなかったし – Visual Studio使いたかったし• けどPythonに – Linuxで動かしたかった – 本持ってた• Javaの講義なんだけどね
  • 13. やるべきこと• 認証とページ遷移• 必要な情報を抽出• データの整形• データベースへの格納• リクエストに対しての出力
  • 14. 認証・ページ遷移ソース見て解析したり通信内容解析もいい だけど、もう尐し楽に解析したいFirefoxプラグインのTamper Dataとかおすすめ
  • 15. Tamper Dataとは• Webアクセスをモニタできるアドオン• HTTPパラメータの中身を見て、いじれる• Webサイトのテストにも使えるらしい
  • 16. ながれ• Cookieを引き回し• 各ページにセッションIDが埋めこまれて いるので、抽出• POSTパラメータに追加して、サーバに シュート – 入れなくていいパラメータもある• 基本的にはこの繰り返し
  • 17. Cookie• Cookieを使いまわす – .NETならCookieContainerで – Pythonならこんな感じ cj = cookielib.CookieJar() //このcjを使いまわす opener = urllib2.build_opener() opener.add_handler(urllib2.HTTPCookieProcessor(cj)) res = opener.open(req) result = res.read() – 普通ですね
  • 18. ゴリゴリと削りだし• スクレイピング – .NETならSgmlReaderでLINQ!LINQ! – PythonはBeautifulSoupかMechanizeが有名 – 正規表現で抽出するのもいいかも• 今回はBeautifulSoupを採用 – 名前がかっこいいから
  • 19. コトコト煮込む• 結構簡単にいけます //まずは煮込む soup = BeautifulSoup(srchtml) //inputタグのidがhogehogeな要素を取り出す q = soup.findAll(input, id=“hogehoge") //0番目の要素のvalueを取り出す session_id = q[0][value]• これでデータを削り出せる
  • 20. 削りだしたデータ例 - 1<span id="form1:htmlMain" <span id="form1:htmlMain"class="output002"> class="output002">教室変更情報詳細<br><br> 補講の詳細は下記の通りです。<br><br>日付:2012年05月07日 月曜日<br> 科目名留学生のための日本語Ⅲ<br>時限:6限<br> 教員名佐藤 有紀先生<br>科目:熱機関<br> 休講日<br>教員:小林 佳弘<br> 補講日7/14(土)2限<br>変更前教室:【千住】2号館2502教室 補講教室9401<br><br> 備考<BR>変更後教室:【千住】2号館2705教室 </span><br>備考:5/7(月)以降、前期期間中を通しての変更となります。<BR></span> . .: : : : : : : : :: :::: :: :: : :::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::: . . : : : :: : : :: : ::: :: : :::: :: ::: ::: :::::::::::::::::: :::::::::::::::::::: . . .... ..: : :: :: ::: :::::: :::::::::::: : ::::::::::::::::::: :::::::::::::::::::::::::: Λ_ Λ . . . .: : : ::: : :: ::::::::: :::::::::::::::::::::::::::::
  • 21. これを後述の正規表現で分ける
  • 22. 削りだしたデータ例 - 2• 休講補講情報の日付書式 – 2012年07月11日水曜日 – 7/12(木)4限 – 7月18日(水) – 7/26 – 5/19,6/2,6/23,6/30,7/14(いずれも土曜日) .,,..,,,,_ / , 3 `ヽーっ l ⊃ ⌒_つ `ー---‐"
  • 23. というわけで、整形• 正規表現難しいけどがんばろう• 不必要な情報を削る方向で• (事務部の気分で)情報は常に変化する – 将来的に出てくるであろう書式にも対応 – どうしても無理なら無視• 下処理しておく – 半角・全角スペースの削除や、全角数字を半 角数字に変換
  • 24. 正規表現の例• 2012年07月07日(木曜日)や、7月7日など を2012-07-07に整形p1 = re.compile(u"^(d+年)?d+月d+日?:*")_date = p1.match(_date).group()_date = _date.replace(u年,-).replace(u月,-).replace(u 日,)• ツッコミ歓迎
  • 25. データベースにシュート• データベースは全然わからないです• クローラーとAPIプログラムを分離• 単にMySQL使いたかっただけ• ログ的に活用できるかも?
  • 26. APIをつくる• リクエストパラメータ例 日付指定:?fdate=20120808&tdate=20120831 キャンパス指定:?campus=[senju or hatoyama]• データベースから欲しい情報だけ拾う JSONやXMLで出力
  • 27. 運用• Cronで定期的にクローラーを実行 – エラーで落ちても影響が尐ない – メモリも多尐節約• まだ実装していません – (できない)
  • 28. できたの?• 完成という言葉は多分無い – 新たな書式や、データ構造と戦い続ける運命 – UNIPAが滅びるまで戦いは続く• そして問題点がいくつか – 夏休み中なので運用テストできていない – あと半年で卒業 – リニューアルされたら禿げる – 使って貰わなければ意味が無い
  • 29. 成果物 - 1• UNIPA API – http://nullserver.jp/nullpo/sqlout.py – とりあえず公開しただけ – JSONでの全件出力しかまだできないです• UNIPA BOT – @TDU_UNIPA_BOT – データがないので稼働できていません
  • 30. 成果物 - 2• iOS向けアプリ(TDU休講情報) – 酢酸先生が作ってくれました – そのうち公開されます(多分) – きっとAndroid版も出ます
  • 31. 成果物 - 3• 講義用Javaプログラム – Javaを絡めるために無理やり作成 – 講義名でTwitter検索するだけ 【千住・休講】07/11(水)6限企業と経営 ---------------------------------------------------------------- Wed Jul 11 12:35:39 JST 2012:JUNJUN593:@XxHKRxX 企業と会計、企業と経営、基礎 統計???かな?? Wed Jul 11 04:34:43 JST 2012:ForbesFortune48:三井住友フィナンシャルグルー プ: 概要: 他のグループ企業と経営統合をしたのでもないのに、既存の子会社との 間で持株会社を設立した背景には、三井住友銀行の財務状況の改善がある( わかし お銀行 との逆さ合併前)。 http://t.co/G64IpQFz Tue Jul 10 20:53:50 JST 2012:horipyon2:企業と経営もっとちゃんとレジュメ書い とけばよかったぁ( ; ; ) 会計に続きえりにお世話なるかも…笑 Tue Jul 10 16:35:56 JST 2012:taisukes07:今週やることが多すぎる!! 英語の PowerPoint、英語のエッセイ、600字、企業と経営のレポートetc ヤバいーー Tue Jul 10 10:38:53 JST 2012:taaakaaa1111:吹いたー! 企業と経営に紅野発見!! 単位もらったわ笑
  • 32. 様々な活用方法• 携帯向けサイトを作る – ガラケーに救いの手を – スマートフォンでも見やすい• データ解析 – データが蓄積すればきっと何か見えてくる – 休講予報とかできるかもよ 何か作ってください
  • 33. さいごに• 精神的に強くなれました• 色々な人に助けてもらいました• 大学の事務部はクソ• 他の大学のUNIPAも気になる• UNIPA MVP募集
  • 34. 俺達の戦いはここからだ!ぬるぷー先生の次回作にご期待下さい おわり