livedoor Reader で EntryFullText
Plagger Conference #1 に行ってきたけど、ノートPCもテトリスDSも無いので家で一人Hackathonした。
Perl難しい!とか思いつつやってたら結局Greasemonkeyスクリプトになってしまった。Plagger関係ないし、中途半端で全く役に立たないネタスクリプトに。ほとんどの場合、p -> o や v の方が便利です。
livedoor Reader with EntryFullText
e でアクティブになってる記事を取得して表示します。
CNETでしか確認していません。他はほとんどうまく行きそうにないので怖くて試してません。
feed の URL が必要なんだけど、それを取得するAPIとか見つけられなかった。なので discover したり rel="self" 見たりひどい実装になってます。
http://plagger.org/trac/browser/trunk/plagger/assets/plugins/Filter-EntryFullText
にあるYAMLファイルを元にしています。handle, handle_force, extract, extract_capture しか理解できません。Greasemonkeyの方では extract_after_hook にも対応したんだけど、PerlからJavascriptに変換しないといけないのであきらめました。
YAMLデータの抽出に作ったスクリプト。Perl書きなれてないので見苦しいとは思いますが置いときます。
#!/usr/bin/perl use strict; use warnings; use File::Basename; use JSON; use YAML; my %rules; my %keys = map { $_ => 1 } my @keys = qw( handle extract extract_capture ); while (</path/to/plagger/assets/plugins/Filter-EntryFullText/*.yaml>) { my $rule = YAML::LoadFile($_); $rule->{handle} ||= $rule->{handle_force}; next if @keys != grep { $rule->{$_} } @keys; $rule->{handle} =~ s/(?<!\\)\./[\\s\\S]/g; $rule->{extract} =~ s/(?<!\\)\./[\\s\\S]/g; $rule->{extract} =~ s/(?<!\\r\?)\\n/(?:\\r?\\n)/g; $rule->{extract} = &to_gm_string($rule->{extract}); $rule->{extract_capture} = [split /\s+/, $rule->{extract_capture}]; map { delete $rule->{$_} } grep { !$keys{$_} } keys %$rule; $rules{basename $_, '.yaml'} = $rule; } my $json = objToJson(\%rules); $json =~ s/\\(?=\\u[\da-f]{4})//g; open my $fh, '>', 'rules.json' or die; print $fh $json; sub to_gm_string { my $string = shift; utf8::decode($string); join '', map { $_ < 0x100 ? chr : sprintf '\u%x', $_ } unpack 'U*', $string; }