読者です 読者をやめる 読者になる 読者になる

CustomFeed::Nowaをあえて使わない方法

Plagger

ナニシテル?がいらないなら、CustomFeedせずに自分のフレンドのRSSを集めてきて、Subscription::File => SmartFeedでも良い気がした。

plugins:
  - module: Subscription::File
    config:
      file: /tmp/nowas.txt

  - module: SmartFeed::All
    config:
      title: '[nowa] 新着記事'

あーこれするとAtomのauthorがnobodyになるのかー。おしい。

CustomFeed::Nowaは「何分前」とかいう文字列から現時刻からの相対時間で日付を算出してるので、取得のタイミングによって日付が変わってしまう問題がある。Dedupedがうまくできなくなったりして困る。

ナニシテルはともかく、記事に関してはscrapeすれば日付情報とってこれると思うんだけど、RSSあるのにわざわざscrapeするのもアホらしいよなー。

ここはすなおにAPI待ちだろうか。

nowas.txtはこのスクリプトでつくった。

use strict;
use warnings;
use utf8;

use Readonly;
use Perl6::Say;
use Encode;

use Web::Scraper;
use LWP::UserAgent;
use HTTP::Request::Common;
use HTTP::Cookies;
use URI::Fetch;

Readonly my $URI_BASE => 'http://my.nowa.jp/friend/favorite?page=';

my ($id, $pass) = @ARGV;

my $cookie_jar = HTTP::Cookies->new(
    file => '/tmp/cookies.txt',
    autosave => 1,
);

my $agent = LWP::UserAgent->new;
$agent->cookie_jar($cookie_jar);
my $login_url = 'http://my.nowa.jp/login/';

my $login_req = POST($login_url, {
    nowa_id =>  $id,
    password => $pass, 
});
my $login_res = $agent->request($login_req);
    
my @friend_rsss;
for (my $i = 1; ;$i++) {
    my $url = $URI_BASE.$i;
    my $res = URI::Fetch->fetch($url, UserAgent => $agent);

    last if $res->is_error;

    my $content = decode_utf8($res->content);

    my $result = scraper {
        process 'td.friend p a', 'friend_url[]' => '@href';
        result 'friend_url';
    }->scrape($content);

    last if ref $result eq 'HASH';

    for my $friend_url (@$result) {
        push @friend_rsss, $friend_url.'?mode=rss20';
    }
}

for my $friend_rss (@friend_rsss) {
    say $friend_rss;
}