M.C.P.C.

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


| トップページ |

2008年4月18日 13:15

EDGE Now!のリンク件数を返す野良API(XML-RPC)プログラム

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

EDGE Now!のリンク件数を返す野良API(XML-RPC)で提供しているXML-RPCインターフェースのプログラムです。

問い合わせがあったURLを、以前作ったEDGE Now!外部DBに問い合わせすると、EDGE Now!の内部のサイトIDが得られます。そのサイトIDを、EDGE Now!内部のAPIに投げて、紹介した人の人数を取得します。

なお、XML-RPCの呼び出し方法は、上記リンク内で書いていますが、はてなに合わせていますw

#!/usr/bin/perl
use strict;
use warnings;
use XMLRPC::Transport::HTTP;
 
XMLRPC::Transport::HTTP::CGI
  -> dispatch_to('link')
  -> handle;
exit;
 
 
package link;
  
use strict;
use warnings;
use CGI;
use DateTime::Format::MySQL;
use DBI;
use LWP::UserAgent;
use URI;
use XML::Simple;
use XML::RSS;
use utf8;
binmode STDOUT => ':utf8';
 
sub getCount {
  shift if UNIVERSAL::isa($_[0] => __PACKAGE__);
  my $self;
  @$self = @_;
 
  our $referer = 'http://labo.dtpwiki.jp/edgenow/bloggerslist.cgi';
  our $ua = LWP::UserAgent->new;
  $ua->timeout(10);
  $ua->agent("bloggerslist/0.1($referer)");
  our $dbh = DBI->connect('dbi:SQLite:dbname='
                         .'edgenow_sites.db',
                         undef, undef , {AutoCommit => 0} );
  my $res = {};
  foreach my $item ( @$self ) {
    $res->{$item} = _db($item);
  }
  return $res;
};
 
sub _db {       
  my $url = shift;
  our $dbh;     
  $url =~ s|/$||;
  my $sth = $dbh->prepare("SELECT * FROM urls WHERE url = ?");
  my $result = $sth->execute($url) || die $!;
  my $ref = $sth->fetchrow_hashref;
  my $entryid = $ref ? $ref->{entryid}: undef;
  $dbh->commit;
  return 0 unless $entryid;
  my $hash = get_EDGENow_indivisual($entryid);
  my $items = $hash->{bloggerList}->[0]->{blogger};
  return scalar @$items;
}
 
sub get_EDGENow_indivisual {
  my $id = shift;
  our $referer;
  our $ua;
  my $proxy = 'http://edgenow.jp/xml/bloggerSite.php';
  my $uri = URI->new( $proxy );
  $uri->query_form(
    id => $id,
  ) if $id;
  my $req = HTTP::Request->new(GET => $uri->as_string);
  $req->referer($referer);
  my $res = $ua->request($req);
  my $xml = $res->content;
  my $xs = new XML::Simple();
  my $ref = $xs->XMLin( $xml, forcearray => 1 );
  return $ref;
}
 
 
1;

使用例は、M.C.P.C.: EDGE Now!リンク数野良APIサンプルプログラムに出してあります。

このプログラムは、URLに対して何か情報を返すXML-RPCインターフェースの実装例としてお使い頂けるかと思います。

投稿 大野 義貴 [Web] | |

トラックバック(1)

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

こんにちは! この前会社のCentOS4のサーバをyumったらPerl5.8.5... 続きを読む

コメントする