Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

15,939 views

Published on

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

  • Be the first to comment

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

  1. 1. 東京電機大学 ポータルサイトUNIPAからの情報抽出と再利用 @nullpoo 2012/8/25
  2. 2. だれ?• 名前:Koki Hashimoto• Twitter :@nullpoo – ぬるぷー• 東京電機大学に通っています• 来年から社畜です• すまべんスタッフになってました
  3. 3. はなすこと• UNIPAとは何か、どこがどうダメなのか – 欠陥仕様、事務部の運用• 無知の状態から形になるまでの道のり – 認証や各ページへの遷移 – スクレイピングでゴリゴリと削り出す – フリーダム書式に正規表現の力 – etc• 成果物と活用方法
  4. 4. UNIPAとは?• 学生向けポータルサイト• 製品名はUNIVERSAL PASSPORTらしい• http://www.jast-gakuen.com/• ググると被害者リストが出てくる
  5. 5. いきさつ• (元)神田キャンパスにUNIPA試験導入 – ものすごく使い勝手が悪い• 神田キャンパス正式導入、一本化 – 使い勝手は変わらず、不具合多数• 他キャンパスにも導入 – 悲しみの連鎖• XMLな講義の課題としてUNIPAを標的に
  6. 6. UNIPAのだめなところ
  7. 7. ログイン• 新しいウィンドウ開くな• メンテナンスしすぎ• Operaだとabout:blankに飛ばされるぞ
  8. 8. 連絡事項• 基本的に通知は無いぞ – 休講補講情報に気づかず出席 – 事務部が機能を無効化• 書式が全く統一されていないぞ – 各詳細ページの「本文」項目のフリーダム感 • やっぱり新しいウィンドウで開く
  9. 9. 作るか・・・
  10. 10. UNIPAクローラー制作過程
  11. 11. 指針• APIとして公開する – 自分でも使いやすく、他の人も使える• とりあえず、休講補講情報を扱う – 事務部からのお知らせなども同じ構造なので 応用は簡単(のはず)• 色々な技術を取り入れる – 正規表現やデータベースなど
  12. 12. 開発言語• 最初はC#で作っていた – C#くらいしかまともに使えなかったし – Visual Studio使いたかったし• けどPythonに – Linuxで動かしたかった – 本持ってた• Javaの講義なんだけどね
  13. 13. やるべきこと• 認証とページ遷移• 必要な情報を抽出• データの整形• データベースへの格納• リクエストに対しての出力
  14. 14. 認証・ページ遷移ソース見て解析したり通信内容解析もいい だけど、もう尐し楽に解析したいFirefoxプラグインのTamper Dataとかおすすめ
  15. 15. Tamper Dataとは• Webアクセスをモニタできるアドオン• HTTPパラメータの中身を見て、いじれる• Webサイトのテストにも使えるらしい
  16. 16. ながれ• Cookieを引き回し• 各ページにセッションIDが埋めこまれて いるので、抽出• POSTパラメータに追加して、サーバに シュート – 入れなくていいパラメータもある• 基本的にはこの繰り返し
  17. 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. 18. ゴリゴリと削りだし• スクレイピング – .NETならSgmlReaderでLINQ!LINQ! – PythonはBeautifulSoupかMechanizeが有名 – 正規表現で抽出するのもいいかも• 今回はBeautifulSoupを採用 – 名前がかっこいいから
  19. 19. コトコト煮込む• 結構簡単にいけます //まずは煮込む soup = BeautifulSoup(srchtml) //inputタグのidがhogehogeな要素を取り出す q = soup.findAll(input, id=“hogehoge") //0番目の要素のvalueを取り出す session_id = q[0][value]• これでデータを削り出せる
  20. 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. 21. これを後述の正規表現で分ける
  22. 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. 23. というわけで、整形• 正規表現難しいけどがんばろう• 不必要な情報を削る方向で• (事務部の気分で)情報は常に変化する – 将来的に出てくるであろう書式にも対応 – どうしても無理なら無視• 下処理しておく – 半角・全角スペースの削除や、全角数字を半 角数字に変換
  24. 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. 25. データベースにシュート• データベースは全然わからないです• クローラーとAPIプログラムを分離• 単にMySQL使いたかっただけ• ログ的に活用できるかも?
  26. 26. APIをつくる• リクエストパラメータ例 日付指定:?fdate=20120808&tdate=20120831 キャンパス指定:?campus=[senju or hatoyama]• データベースから欲しい情報だけ拾う JSONやXMLで出力
  27. 27. 運用• Cronで定期的にクローラーを実行 – エラーで落ちても影響が尐ない – メモリも多尐節約• まだ実装していません – (できない)
  28. 28. できたの?• 完成という言葉は多分無い – 新たな書式や、データ構造と戦い続ける運命 – UNIPAが滅びるまで戦いは続く• そして問題点がいくつか – 夏休み中なので運用テストできていない – あと半年で卒業 – リニューアルされたら禿げる – 使って貰わなければ意味が無い
  29. 29. 成果物 - 1• UNIPA API – http://nullserver.jp/nullpo/sqlout.py – とりあえず公開しただけ – JSONでの全件出力しかまだできないです• UNIPA BOT – @TDU_UNIPA_BOT – データがないので稼働できていません
  30. 30. 成果物 - 2• iOS向けアプリ(TDU休講情報) – 酢酸先生が作ってくれました – そのうち公開されます(多分) – きっとAndroid版も出ます
  31. 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. 32. 様々な活用方法• 携帯向けサイトを作る – ガラケーに救いの手を – スマートフォンでも見やすい• データ解析 – データが蓄積すればきっと何か見えてくる – 休講予報とかできるかもよ 何か作ってください
  33. 33. さいごに• 精神的に強くなれました• 色々な人に助けてもらいました• 大学の事務部はクソ• 他の大学のUNIPAも気になる• UNIPA MVP募集
  34. 34. 俺達の戦いはここからだ!ぬるぷー先生の次回作にご期待下さい おわり

×