はてなブックマーク Web HookでTwitterに投稿

作ってみた。
titleがtitileになってるので注意直った


twitterへの投稿は、http://d.hatena.ne.jp/hirataka522/20080126/1201300282を参考に
truncate_text関数は、symfonyのhelperから拝借しました。


ベータ版ですが、PEARにServices_Twitterってのもあります。

<?php
function truncate_text($text, $length = 30, $truncate_string = '...', $truncate_lastspace = false)
{
  if ($text == '')
  {
    return '';
  }

  $mbstring = extension_loaded('mbstring');
  if($mbstring)
  {
   @mb_internal_encoding(mb_detect_encoding($text));
  }
  $strlen = ($mbstring) ? 'mb_strlen' : 'strlen';
  $substr = ($mbstring) ? 'mb_substr' : 'substr';

  if ($strlen($text) > $length)
  {
    $truncate_text = $substr($text, 0, $length - $strlen($truncate_string));
    if ($truncate_lastspace)
    {
      $truncate_text = preg_replace('/\s+?(\S+)?$/', '', $truncate_text);
    }

    return $truncate_text.$truncate_string;
  }
  else
  {
    return $text;
  }
}

# キーの比較
if ($_POST['key'] != 'xxxxxxxxxxx')
  die("Authentication failed");

# 追加以外なら終了
if ($_POST['status'] != 'add')
  return;

# エントリーの情報
$b_url   = $_POST['url'];
$b_title = truncate_text($_POST['title'], 100);

# twitterに投稿
$url = 'http://twitter.com/statuses/update.xml?';
$username = 'twitterのユーザ名';
$password = 'twitterのパスワード';
$params = 'status='. rawurlencode('はてブ:' . $b_title . $b_url);

$result = file_get_contents($url.$params , false, stream_context_create(array(
  'http' => array(
    'method' => 'POST',
    'header' => 'Authorization: Basic '. base64_encode($username. ':'. $password)
  )
)));