M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2007年7月18日 21:25

新しいAdobeのアップデートファイル一覧ページのRSS生成

このエントリーをはてなブックマークに追加 mixiチェック

http://dtpwiki.jp/rss/adobejpproductupdate.xml

で、

アドビ - 製品のアップデート [www.adobe.com]

を RSS に変換したものを取れるようにしました。

つまり、

Adobejpproductupdaterss01
▲「アドビ - 製品のアップデート」のページをブラウザで表示

の内容を、RSSリーダで読めます。

次の画像は、Opera 内蔵のメールソフト、M2 で見た場合です。

Adobejpproductupdaterss02
▲Opera M2 で RSS 表示

対象 RSS がアップデートされたら項目が追加される様はまるでメールソフトみたいです。Mozilla Thunderbird に RSS を登録するっていうのもお勧め。

~~~

生成スクリプトのソースです。

#!/usr/bin/perl
use strict;
use warnings;
use LWP;
use XML::RSS;
use HTML::Entities;
use utf8;
use Encode;
binmode STDOUT => ":utf8";
use HTML::TreeBuilder;
 
my $base_url = 'http://www.adobe.com';
my $url = 'http://www.adobe.com/jp/downloads/updates/';
 
my @headers = ( 
  'User-Agent' => 'DTPWiki.jp html2RSSbot('
                . 'http://dtpwiki.jp/rss/'
                . 'adobejpproductupdate.xml)',
);
my $browser = LWP::UserAgent->new;
my $response = $browser->get($url, @headers);
exit 1 unless $response->is_success;
my $html = decode('utf8',$response->content);
 
$html =~ s/\x0D\x0A|\x0D|\x0A/\n/g;
$html =~ tr/\t//d;
$html =~ s|src="|src="$base_url|g;
 
(my $Regex = <<'REGEX') =~ tr/\n//d;
<h4>(.+?)</h4>.+?<p>(.+?)<br\s/>\s*(.+?)</p>
REGEX
 
my $data;
{
  my $item;
  while ($html =~m|$Regex|xgsio) {
    $item = { title        => $1,
              date         => parse_date($2),
              description  => $3,
              url          => q(),
    };
    my $tree = HTML::TreeBuilder->new();
    $tree->parse($item->{description});
    $tree->eof();
    if (my $a = $tree->find('a') ) {
      $item->{url  } = $a->attr_get_i('href');
    }
    $tree->delete;
    
    $tree = HTML::TreeBuilder->new();
    $tree->parse($item->{title});
    $tree->eof();
    if (my $a = $tree->find('a') ) {
      $item->{title} = $a->as_text;
      $item->{url  } = $a->attr_get_i('href');
    }
    $tree->delete;
     
    push @$data, {
                  title       => $item->{title},
                  link        => $base_url . $item->{url},
                  date        => $item->{date },
                  description => $item->{description},
                };
  }
}
my $sort;
@$sort = sort { $b->{date} cmp $a->{date} } @$data;
 
 
my $rss = XML::RSS->new;
        $rss->add_module(
                prefix=>'content',
                uri=>'http://purl.org/rss/1.0/modules/content/'
                );
$rss->channel(
    title       => 'アドビ - 製品のアップデート',
    link        => $url,
    description => 'アドビ - 製品のアップデート',
    language    => 'ja',
    dc => {
      publisher    => 'adobe.com/jp',
      contributor  => 'DTPWiki.jp',
    },
    syn => {
      updatePeriod => 'weekry',
      updateFrequency => '1',
    },
);
foreach my $item (@$sort) {
    
    my $description = $item->{'description'};
    $rss->add_item(
        link        => $item->{'link'},
        title       => $item->{'title'},
        description => encode_entities($description, '<>&"'),
        dc => {
          date      => $item->{'date'},
        },
        content => {
          encoded => '<![CDATA['
                   . $description
                   . ']]>',
        },
    );
}
 
if ($ENV{GATEWAY_INTERFACE}) {
    require CGI;
    print CGI::header('text/xml; charset=utf-8');
}
 
print $rss->as_string();
 
exit 1;
 
 
sub parse_date {
  my $date = shift;
  $date =~tr|0-9|0-9|;
  $date =~tr|年月|--|;
  $date =~tr|日||d;
  (my $year, my $mon, my $day) = split('-', $date);
  return sprintf("%04d-%02d-%02d", $year, $mon, $day );
}

以前のものよりもすっきりしていますが、これは以前のダウンロードページは、HTML の更新作業をものすごく手作業でやっていたらしく、HTML の構造がキメラで、個別対応部分がすごいぐちゃぐちゃしていたからです。


(2008-10-6 11:45追記)

Adobeのダウンロードの更新情報のRSSフィードを勝手に作成しました - diary@longkey1.net

にて、高機能版のRSSが公開されています。

投稿 大野 義貴 [RSS] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2146

コメント(2)

いつも拝見しています。
ところで駆け込み寺のRSSって死んでます?

ところで駆け込み寺のRSSって死んでます?

はい、さっきまで死んでました、ていうか、

M.C.P.C.: DTP駆け込み寺スレッド表示モードでモダンブラウザでトピックリンクがきかない件直してもらいました。

のエントリで、掲示板メンテナーさんに不具合直してもらったときに入った修正箇所を、RSS 生成側で抽出キーワードとして使っていたんですね。全く面目ないです。

今は直っていますので、ご利用いただけます。ご指摘ありがとうございました。

コメントする