ホーム > perl | webservice > はてぶタグとともに2008年を振り返る

はてぶタグとともに2008年を振り返る

はてぶのタグを年と月ごとにカウントするやつつくりました。
明らかに車輪の再発明ぽいですね。誰かやってるんでしょうけどXML::LibXMLのリハビリがてらに作ってみました。
2007年と2008年のぶんをとってくるです。

$tags = {
    year => {
        month => {
            'TAG' => count,
        },
    },
};

↑とってくるデータ構造はこんなかんじ。

んでコードと。

#!/usr/bin/perl
use strict;
use warnings;

use feature qw/say/;
use utf8;

use Encode;
use LWP::Simple qw/get/;
use XML::LibXML;
use XML::LibXML::XPathContext;

use DateTime;
use DateTime::Format::ISO8601;

use Storable;

my $base_url = 'http://b.hatena.ne.jp/nihen/atomfeed';
my $parser = XML::LibXML->new();
my $xc = XML::LibXML::XPathContext->new();
my $dt_fmt = DateTime::Format::ISO8601->new;

my $page = 0;
my $tags = {
    2007 => {map { $_ => +{} } 1..12 },
    2008 => {map { $_ => +{} } 1..12 },
};
SEARCH_2007_2008:
    while (1) {
        my $content = get($base_url . '?of=' . ( ++$page - 1 ) * 20);
        say 'entry of ' . ($page - 1) * 20 . '-' . $page * 20;
        my $doc = $parser->parse_string($content);

        my $namespace = $doc->documentElement()->getAttribute('xmlns');
        my $namespace_dc = $doc->documentElement()->getAttribute('xmlns:dc');
        $xc->registerNs('x', $namespace);
        $xc->registerNs('xdc', $namespace_dc);

         my @entries = $xc->findnodes('/x:feed/x:entry', $doc);

        if ( !@entries ) {
            last SEARCH_2007_2008;
        }

        foreach my $entry ( @entries ) {
            my ($issued) = $xc->findnodes('x:issued', $entry);
            my $dt = $dt_fmt->parse_datetime($issued->textContent);

            if ( $dt->year < 2007 ) {
                last SEARCH_2007_2008;
            }

            my ($title) = $xc->findnodes('x:title', $entry);
            my @tags = $xc->findnodes('xdc:subject', $entry);
            for my $tag_el ( @tags ) {
                my $tag = $tag_el->textContent;
                if ( !defined $tags->{$dt->year}{$dt->month}{$tag} ) {
                    $tags->{$dt->year}{$dt->month}{$tag} = 1;
                }
                else {
                    $tags->{$dt->year}{$dt->month}{$tag}++;
                }
            }
        }
        store $tags, 'tagsstorefile';
    }

store $tags, 'tagsstorefile';

コメント:0

コメントフォーム
入力した情報を記憶する

トラックバック:0

この記事のトラックバック URL
https://blog.everqueue.com/chiba/2008/12/31/38/trackback/
トラックバックの送信元リスト
はてぶタグとともに2008年を振り返る - へぼい日記 より

ホーム > perl | webservice > はてぶタグとともに2008年を振り返る

検索
フィード
メタ情報

ページの上部に戻る