a要素やform要素で遷移する際に utn 属性がついていると、UserAgent経由で端末IDが取得出来る。
また guid=ON がついてると X-DCMGUID にてサブスクライバIDが取得出来る。
EZ番号と言う呼称でサブスクライバIDを送出している。HTTP Request Header で、HTTP_X_UP_SUBNO で取得出来る。
x-jphone-uid フィールドでサブスクライバ ID が取得出来る。
また x-s-unique-id で端末 ID を取得出来る。
x-jphone-msname で機種名称が取得可能。
d:id:tokuhirom の WWW::MobileCarrierJP があるけど自分でも試しに書いてみたよ。
#!/usr/bin/perl use utf8; use strict; use warnings; use URI; use YAML; use Data::Dumper; use Perl6::Say; use Web::Scraper; my $u = URI->new('http://www.nttdocomo.co.jp/service/imode/make/content/spec/useragent/index.html'); my $s = scraper { process '//table[@summary]', 'versions[]' => scraper { process '//self::table', 'version' => sub { $_->attr('summary') =~ m|(HTML\d\.\d)|; return $1; }; my $version = result 'version'; my $series; process '//tr/td[not(contains(@class, "brownLight"))]/parent::tr', 'models[]' => scraper { process '//td[position()=1 and contains(@class, "acenter")]', 'series' => 'TEXT'; $series = (result 'series') ? result 'series' : $series; process '//td[not(contains(@class, "acenter"))]/span', 'rows[]' => sub { $_->content_array_ref->[0]; }; my $rows = result 'rows'; my $model = shift @$rows; $model =~ s/\s*(.*?)\s*//; my $ua = [ map { (m{(DoCoMo/1.0/\w+(?:/c\d+(?:/(?:TB|TD|TJ)))?|DoCoMo/2.0 \w+\(.*?\))}g); } grep { $_ } @$rows ]; return +{ series => $series, model => $model, ua => $ua, }; }; return +{ version => $version, models => result 'models', }; }; result 'versions'; }; my $res = $s->scrape($u); say Dump($res);
ここに至るまで結構、試行錯誤だった件。Web::Scraper 凄いすなー。
#!/usr/bin/perl use strict; use warnings; use Carp::Clan; use CAM::PDF; use LWP::UserAgent; use Perl6::Say; use Data::Dump qw(dump); my $ua = LWP::UserAgent->new; my $res = $ua->get("http://www.nttdocomo.co.jp/binary/pdf/service/imode/make/content/spec/imode_spec.pdf"); if ($res->is_success) { my $pdf = CAM::PDF->new($res->content); if ($CAM::PDF::errstr) { croak($CAM::PDF::errstr); } for my $p (1 .. $pdf->numPages) { say dump($pdf->getPageText($p)); } }
を実行すると、
Carp::Clan::__ANON__(): Incorrect password(s). The document cannot be decrypted.
となる也。
http://www31.ocn.ne.jp/~h_ishida/xdoc2txt.html
をcryptlib付きで、-nオプションを付与してあげるとテキスト化はできるようになります。
これってグレーだったりしませんか?
不正アクセス禁止法にはひっかからないとは思うのですが…。
それにしても、xdoc2txtが空パスのPDFをdecryptできてCAM::PDFができないのはなんでなんだろう。
xdoc2txtがOpensorceじゃないのでいまいち追う気にはならない・・・。