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

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

Upload: koichi-taniguchi

Post on 24-May-2015

547 views

Category:

Technology


3 download

TRANSCRIPT

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

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

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

アツい夏、TIF の夏

• TOKYO IDOL FESTIVAL

• http://www.idolfes.com/

• TOKYO IDOL FESTIVAL(トウキョウ・アイドル・フェスティバル)は、2010年より開催されている日本のアイドルイベントである。略称はTIF(ティフ)。女性アイドルグループを中心に50組以上の女性アイドルが参加する。参加アイドルの数では日本最大規模のアイドルイベントである。 (出典: Wikipedia)

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

TIF 2012

• 8/4, 8/5 の二日間

• 10 ステージ、111 組 732 名のアイドル(土曜は 9 ステージ)

• 2012 年の目玉は SKE48

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

お気に入り

• お気に入りのアイドルを見たい!

• タイムテーブルを見よう

• http://www.idolfes.com/2012/timetable/

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

WTF

• 画像かよ!!

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

• iPhone, Androidで見ると

• http://www.idolfes.com/2012/sp/

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

タイムテーブル

• もっと検索しやすく

• やっぱ iCal

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

iCal 形式

• テキストベースだから何となくわかるね

• 適当なイベントを作って、iCal で export

してみよう

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

形式• iCal の形式

BEGIN:VCALENDARMETHOD:PUBLISHVERSION:2.0X-WR-TIMEZONE:Asia/TokyoX-WR-CALNAME:カレンダー名X-WR-CALDESC:説明 (イベントデータ)END:VCALENDAR

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

形式• イベント

BEGIN:VEVENT : :END:VEVENT

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

形式• イベントの見てもよくわからんデータ

UID:ランダム文字列SEQUENCE:0STATUS:CONFIRMEDTRANSP:OPAQUE

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

形式• イベントの見りゃわかるデータ

DTSTART:開始日時 (%Y%m%dT%H%M%SZ)DTEND:終了日時 (%Y%m%dT%H%M%SZ)SUMMARY:イベントのタイトルLOCATION:場所DESCRIPTION:説明

Page 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{\<br\s*\/>\s*}{\n}g },        ];    };};

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

URL

• $date は 0804 か 0805

• $stage は hot とか green とか doll とかmy $url = "http://www.idolfes.com/2012/sp/time${date}_${stage}.html";

Page 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',);

Page 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',);

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

開始時刻と終了時刻• そもそも iCal の日時は UTC

• DateTime でちゃんと取り扱おう

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

開始時刻と終了時刻• 時刻の形式

• HH:MM~HH:MMmy($from_time, $to_time) = split /\x{ff5e}/, $event->{time};

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

開始時刻と終了時刻• 罠その 1

• 8/4 の HOT STAGE

• http://www.idolfes.com/2012/sp/time0804_hot.html

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

開始時刻と終了時刻• 罠その 2

• 8/4 の FANTASTIC THEATER ほか

• http://www.idolfes.com/2012/sp/time0804_fantastic.html

% perl -MDateTime -e'DateTime->new(hour => 24)'The 'hour' parameter ("24") to DateTime::new did not pass the 'an integer between 0 and 23' callback

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

開始時刻と終了時刻• 時刻の形式

• HH:MM~HH:MMmy($from_time, $to_time) = split /[\x{ff5e}\x{301c}]/, $event->{time};

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

出演ユニット• イベントタイトルと出演者が別の場合

• performer に

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

iCal のデータ形式• 75 文字で改行させないといけない

• 続く次の行は空白かタブではじまる

• \ は \\ に

• 改行は \n に

• , は \, に

Page 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);}

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

最終的に

• https://gist.github.com/3282049

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

取り込んだ例

• DEMO

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

まとめ• User-Agent を iPhone は意外に盲点

• Web::Scraper やっぱり便利

• 何事も CPAN に頼らない

• アイドル別のほうが高まれる

• http://www.amazon.co.jp/dp/B008OI71MK

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

糸冬了

• QUESTIONS?