Hatena::ブログ(Diary)

kujooさんの「という夢を見たんだ。」日記

Friday, August 28, 2009

中途半端なものを垂れ流し

|  中途半端なものを垂れ流しを含むブックマーク


垂れ流すためのブックマークレットを作って垂れ流してみます。

perlスクリプトがメインです。 はてなハイクに垂れ流します。 ダメダメなブツです。


(当初、HTML::TagParserでページタイトルを取得していましたが上手く取得できない時?があるのでWeb::Scraperを使用するように変更しました)


acc2post4haiku.pl

#!perl
use strict;
use warnings;
use utf8;
use Encode;
use CGI;
#use CGI::Carp qw(fatalsToBrowser);
use Config::Pit;
use LWP::UserAgent;
use MIME::Base64;
#use HTML::TagParser;
use Web::Scraper;
use URI;

  my $post;
  my $cgi = CGI->new();
  my $ua = $cgi->param('ua') ? $cgi->param('ua') : "";

  if($cgi->param('id') && $cgi->referer) {
    my $refer = $cgi->referer;
    if($cgi->param('id') eq 'xxxxxxxxxxxxxxxx') {
      if($refer =~ /^http\:/) {
        $post = 'これ見てたよ: ';
        my $uri = new URI($refer);
        my $title = scraper {
          process 'html head title', 'title' => 'TEXT';
          result 'title';
        }->scrape($uri);
        if($title) { $post .= $title.' '; }
#       my $html = HTML::TagParser->new($refer);
#       my $title = $html->getElementsByTagName('title');
#       if($title) { $post .= Encode::decode('utf8', $title->innerText()).' '; }
        $post .= "\n".$refer;
      }
    }
  }

  if($post) {
    $post .= "\n".&update_message($post);
  } else {
    $post = 'invalid parameter';
  }

  print $q->header(-type => 'text/html', -charset => 'utf-8');
  print "/* $post */\n\n";

  exit;


sub update_message {
  my($msg, $ua_,) = @_;
  unless($msg) { return '-'; }
  my $config = pit_get('hatena.ne.jp', requires => {
    id            => 'on hatena.ne.jp',
    post_password => 'on hatena.ne.jp',
  });
  my $ua = $ua_ ? $ua_ : "";  # or 'API'
  my %haiku = (
    status  => $msg,
    keyword => 'id:'.$config->{id},
    source  => $ua,
  );
  my $ua = LWP::UserAgent->new();
  $ua->default_header(
    'Authorization:' =>
      encode_base64("$config->{id}:$config->{post_password}"),
  );
  my $response = $ua->post(
    'http://h.hatena.ne.jp/api/statuses/update.xml',
    \%haiku,
  );
  return $response->as_string;
}

こんなのをどっかのサーバーに置いとく。

Config::Pitでハイクのアカウント設定を。


んでこんな感じのブックマークレットで

javascript:(function(){var%20s=document.createElement('script');s.charset='UTF-8';s.src='http://xxx.xxx.xxx.xxx/acc2post4haiku.pl?id=xxxxxxxxxxxxxxxx';(document.getElementsByTagName('head')[0]||document.body).appendChild(s)})();

そうすっとハイクのidページに見てるページが投稿されます。(FirefoxとOperaで確認してみました)

コード見ると分かると思いますが、リファラが付いてる前提です。

よく分かって無いので手抜きなのでhtmlなページじゃないと動きません。


これを作った動機としては、はてブとかにブクマするほどじゃないけど、見たニコ動の履歴とかを残しておきたかったので。ただ、こういうのをついったのTLに流すのは自分的に気持が悪かったので誰も見ていないであろう、はてなハイクの自分のIDページに流すようにしてみた〜。次はよくある、聴いてる曲とかやってみようと思ったんだけど調べるのが面倒そうな気がっふぅ。


ハイクは文字数カンケーないので、長いページ名でも問題なし! それにニコニコ動画のURI貼るとプレイヤーが表示されるし(親切?)。まあ、ハイクのAPIはついった互換なのでちょこちょこ変えればついったにも送れるけど、その場合は文字数考慮が必要になりますね。


いろいろテキトーです。自分用だからまあいい・・・のか?

ブックマークレットで呼んでるアドレスは、見てるページのサーバーには飛ばないよねぇ・・・? (飛んでたら投稿URLばれちゃうんだけど・・・)

トラックバック - http://d.hatena.ne.jp/kujoo/20090828/p1
 
196441