真・ドルヲタを支える技術    @nipotan
アツい夏、TIF の夏• TOKYO IDOL FESTIVAL• http://www.idolfes.com/ •   TOKYO IDOL FESTIVAL(トウキョウ・アイドル・フェスティバ     ル)は、2010年より開催されている...
TIF 2012• 8/4, 8/5 の二日間• 10 ステージ、111 組 732 名のアイドル (土曜は 9 ステージ)• 2012 年の目玉は SKE48
お気に入り• お気に入りのアイドルを見たい!• タイムテーブルを見よう • http://www.idolfes.com/2012/timetable/
WTF• 画像かよ!!
否• iPhone, Androidで見ると • http://www.idolfes.com/2012/sp/
タイムテーブル• もっと検索しやすく • やっぱ iCal
iCal 系 CPAN モジュール• http://search.cpan.org/search?  query=ical&mode=all
iCal 形式• テキストベースだから何となくわかるね• 適当なイベントを作って、iCal で export してみよう
形式• iCal の形式   BEGIN:VCALENDAR   METHOD:PUBLISH   VERSION:2.0   X-WR-TIMEZONE:Asia/Tokyo   X-WR-CALNAME:カレンダー名   X-WR-CALD...
形式• イベント         BEGIN:VEVENT            :            :         END:VEVENT
形式• イベントの見てもよくわからんデータ    UID:ランダム文字列    SEQUENCE:0    STATUS:CONFIRMED    TRANSP:OPAQUE
形式 • イベントの見りゃわかるデータDTSTART:開始日時 (%Y%m%dT%H%M%SZ)DTEND:終了日時 (%Y%m%dT%H%M%SZ)SUMMARY:イベントのタイトルLOCATION:場所DESCRIPTION:説明
Let’s Scrapeuse strict;use warnings;use Web::Scraper;my $tif = scraper {    process section, event[] => scraper {        p...
URL• $date は 0804 か 0805• $stage は hot とか green とか doll とかmy $url = "http://www.idolfes.com/2012/sp/time${date}_${stage}.h...
ステージ名• ちゃんと正式名称がある • 場所に使えるmy %stages = (    hot        =>   HOT STAGE,    green      =>   GREEN OASYS,    doll       =>  ...
greeting• 自由すぎる • http://www.idolfes.com/2012/sp/    time0804_greeting.html
ステージ名• greeting はパス…my %stages = (    hot        => HOT STAGE,    green      => GREEN OASYS,    doll       => DOLL FACTORY...
開始時刻と終了時刻• そもそも iCal の日時は UTC • DateTime でちゃんと取り扱おう
開始時刻と終了時刻• 時刻の形式 • HH:MM∼HH:MMmy($from_time, $to_time) = split /x{ff5e}/, $event->{time};
開始時刻と終了時刻• 罠その 1 • 8/4 の HOT STAGE • http://www.idolfes.com/2012/sp/    time0804_hot.html
開始時刻と終了時刻• 罠その 2 • 8/4 の FANTASTIC THEATER ほか • http://www.idolfes.com/2012/sp/      time0804_fantastic.html% perl -MDateT...
開始時刻と終了時刻• 罠その 3 • 8/4 WELCOME MARQUEE 9:45∼10:00 • http://www.idolfes.com/2012/sp/   time0804_welcome.html   • 通常 vs ここだけ
開始時刻と終了時刻• 時刻の形式 • HH:MM∼HH:MMmy($from_time, $to_time)    = split /[x{ff5e}x{301c}]/, $event->{time};
出演ユニット• イベントタイトルと出演者が別の場合 • performer に
iCal のデータ形式• 75 文字で改行させないといけない • 続く次の行は空白かタブではじまる•  は  に• 改行は n に• , は , に
iCal で安全な形式sub ical_safe {    my $str = shift;    $str =~ s///g;    $str =~ s/n/n/g;    $str =~ s/,/,/g;    my @rounded = ...
最終的に• https://gist.github.com/3282049
取り込んだ例• DEMO
まとめ• User-Agent を iPhone は意外に盲点• Web::Scraper やっぱり便利• 何事も CPAN に頼らない• アイドル別のほうが高まれる• http://www.amazon.co.jp/dp/B008OI71MK
糸冬了• QUESTIONS?
Upcoming SlideShare
Loading in …5
×

真・ドルヲタを支える技術

6,216 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,216
On SlideShare
0
From Embeds
0
Number of Embeds
4,914
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

真・ドルヲタを支える技術

  1. 1. 真・ドルヲタを支える技術 @nipotan
  2. 2. アツい夏、TIF の夏• TOKYO IDOL FESTIVAL• http://www.idolfes.com/ • TOKYO IDOL FESTIVAL(トウキョウ・アイドル・フェスティバ ル)は、2010年より開催されている日本のアイドルイベントであ る。略称はTIF(ティフ)。女性アイドルグループを中心に50組以 上の女性アイドルが参加する。参加アイドルの数では日本最大規 模のアイドルイベントである。 (出典: Wikipedia)
  3. 3. TIF 2012• 8/4, 8/5 の二日間• 10 ステージ、111 組 732 名のアイドル (土曜は 9 ステージ)• 2012 年の目玉は SKE48
  4. 4. お気に入り• お気に入りのアイドルを見たい!• タイムテーブルを見よう • http://www.idolfes.com/2012/timetable/
  5. 5. WTF• 画像かよ!!
  6. 6. 否• iPhone, Androidで見ると • http://www.idolfes.com/2012/sp/
  7. 7. タイムテーブル• もっと検索しやすく • やっぱ iCal
  8. 8. iCal 系 CPAN モジュール• http://search.cpan.org/search? query=ical&mode=all
  9. 9. iCal 形式• テキストベースだから何となくわかるね• 適当なイベントを作って、iCal で export してみよう
  10. 10. 形式• iCal の形式 BEGIN:VCALENDAR METHOD:PUBLISH VERSION:2.0 X-WR-TIMEZONE:Asia/Tokyo X-WR-CALNAME:カレンダー名 X-WR-CALDESC:説明 (イベントデータ) END:VCALENDAR
  11. 11. 形式• イベント BEGIN:VEVENT : : END:VEVENT
  12. 12. 形式• イベントの見てもよくわからんデータ UID:ランダム文字列 SEQUENCE:0 STATUS:CONFIRMED TRANSP:OPAQUE
  13. 13. 形式 • イベントの見りゃわかるデータDTSTART:開始日時 (%Y%m%dT%H%M%SZ)DTEND:終了日時 (%Y%m%dT%H%M%SZ)SUMMARY:イベントのタイトルLOCATION:場所DESCRIPTION:説明
  14. 14. Let’s Scrapeuse strict;use warnings;use Web::Scraper;my $tif = scraper {    process section, event[] => scraper {        process time, time => TEXT;        process div > h4, title => TEXT;        process div > p, performer => [            HTML, sub { s{<brs*/>s*}{n}g },        ];    };};
  15. 15. URL• $date は 0804 か 0805• $stage は hot とか green とか doll とかmy $url = "http://www.idolfes.com/2012/sp/time${date}_${stage}.html";
  16. 16. ステージ名• ちゃんと正式名称がある • 場所に使えるmy %stages = (    hot => HOT STAGE,    green => GREEN OASYS,    doll => DOLL FACTORY,    fantastic => FANTASTIC THEATER,    wonder => WONDER FUTURE PLANET,    smile => SMILE GARDEN,    sky => SKY STAGE,    secret => SECRET COURT,    fresh => FRESH FIELD,    welcome => WELCOME MARQUEE,    greeting => GREETING SQUARE,);
  17. 17. greeting• 自由すぎる • http://www.idolfes.com/2012/sp/ time0804_greeting.html
  18. 18. ステージ名• greeting はパス…my %stages = (    hot => HOT STAGE,    green => GREEN OASYS,    doll => DOLL FACTORY,    fantastic => FANTASTIC THEATER,    wonder => WONDER FUTURE PLANET,    smile => SMILE GARDEN,    sky => SKY STAGE,    secret => SECRET COURT,    fresh => FRESH FIELD,    welcome => WELCOME MARQUEE,# greeting => GREETING SQUARE,);
  19. 19. 開始時刻と終了時刻• そもそも iCal の日時は UTC • DateTime でちゃんと取り扱おう
  20. 20. 開始時刻と終了時刻• 時刻の形式 • HH:MM∼HH:MMmy($from_time, $to_time) = split /x{ff5e}/, $event->{time};
  21. 21. 開始時刻と終了時刻• 罠その 1 • 8/4 の HOT STAGE • http://www.idolfes.com/2012/sp/ time0804_hot.html
  22. 22. 開始時刻と終了時刻• 罠その 2 • 8/4 の FANTASTIC THEATER ほか • http://www.idolfes.com/2012/sp/ time0804_fantastic.html% perl -MDateTime -eDateTime->new(hour => 24)The hour parameter ("24") to DateTime::new did not pass the aninteger between 0 and 23 callback
  23. 23. 開始時刻と終了時刻• 罠その 3 • 8/4 WELCOME MARQUEE 9:45∼10:00 • http://www.idolfes.com/2012/sp/ time0804_welcome.html • 通常 vs ここだけ
  24. 24. 開始時刻と終了時刻• 時刻の形式 • HH:MM∼HH:MMmy($from_time, $to_time) = split /[x{ff5e}x{301c}]/, $event->{time};
  25. 25. 出演ユニット• イベントタイトルと出演者が別の場合 • performer に
  26. 26. iCal のデータ形式• 75 文字で改行させないといけない • 続く次の行は空白かタブではじまる• は に• 改行は n に• , は , に
  27. 27. iCal で安全な形式sub ical_safe {    my $str = shift;    $str =~ s///g;    $str =~ s/n/n/g;    $str =~ s/,/,/g;    my @rounded = ();    while ($str =~ s/^(.{1,75})//) {        push @rounded, $1;    }    return join("n ", @rounded);}
  28. 28. 最終的に• https://gist.github.com/3282049
  29. 29. 取り込んだ例• DEMO
  30. 30. まとめ• User-Agent を iPhone は意外に盲点• Web::Scraper やっぱり便利• 何事も CPAN に頼らない• アイドル別のほうが高まれる• http://www.amazon.co.jp/dp/B008OI71MK
  31. 31. 糸冬了• QUESTIONS?

×