Twitterユーザの画像を表示するPukiWikiプラグイン「twitter_img」

目次

概要

twitter_imgプラグインは、Twitterユーザのプロフィール画像を取得してWiki上に表示するためのプラグインです。

インストール

twitter_imgプラグインを使用するためには、twitter_img.inc.phpをpluginフォルダにインストールします。
twitter_img.inc.phpは、下記のソースコードを参照ください。

使い方

twitter_imgの引数にTwitterユーザの名前を指定します。

#twitter_img(Twitterユーザの名前)
#twitter_img(nattou_curry)

詳細

ソースコード

以下、プラグインtwitter_img」のソースコードです。

twitter_img.inc.php
<?php
// PukiWiki - Yet another WikiWikiWeb clone.
// $Id: twitter_img.inc.php,v 1.00 2010/02/13 21:10:00 nattou_curry Exp $
//
// Inline-twitter-image plugin

define('PLUGIN_TWITTER_IMG_USAGE', '#twitter_img(): Usage: (twitter-user-name)<br />' . "\n");

function plugin_twitter_img_convert()
{
	####################################################
	# Get Args
	####################################################

	$args = func_get_args();

	if (! isset( $args[0] ) ) {
		return PLUGIN_TWITTER_IMG_USAGE;
	}

	$user_name = $args[0];
	$user_page = "http://twitter.com/$user_name";

	####################################################
	# Read Cache File
	####################################################

	$cache = array();

	if ( file_exists( CACHE_DIR . "twitter_img.dat" ) ) {

		$fp = fopen(CACHE_DIR . "twitter_img.dat", "r");
		
		while ( ! feof( $fp ) ) {
			$line = fgets( $fp );
			$line = chop( $line );

			$linedata = explode( "|", $line );

			if ( count( $linedata ) < 3 ) {
				continue;
			}

			$cache_user_name = $linedata[0];
			$cache_img_url = $linedata[1];
			$cache_timestamp = $linedata[2];

			$cache[$cache_user_name] = array( 
				img_url => $cache_img_url,
				timestamp => $cache_timestamp
			);
		}

		fclose( $fp );
	}

	####################################################
	# Check Cache
	####################################################

	$use_cache = false;

	if ( array_key_exists( $user_name, $cache ) ) {
		$data = $cache[$user_name];
		$img_url = $data["img_url"];
		$timestamp = $data["timestamp"];

		if ( time() < $timestamp + 60 * 60 ) {
			$use_cache = true;
		}
	}

	if ( $use_cache == false ) {
	
		####################################################
		# Get Image Url
		####################################################
	
		@$contents = file_get_contents( $user_page );
	
		$img_url = "";

		# Public Mode
		$pattern = '/<img alt="" border="0" height="73" id="profile-image" src="(.*?)" valign="middle" width="73" \/>/';
	
		if ( preg_match( $pattern, $contents, $matches ) == 1 ) {
			$img_url = $matches[1];
		}
	
		# Private Mode
		$pattern = '/<img alt="" class="profile-img" height="73" src="(.*?)" width="73" \/>/';
	
		if ( preg_match( $pattern, $contents, $matches ) == 1 ) {
			$img_url = $matches[1];
		}
	
		####################################################
		# Update Cache
		####################################################
	
		$timestamp = time();
	
		$cache[$user_name] = array( 
			img_url => $img_url,
			timestamp => $timestamp
		);
	
		####################################################
		# Write Cache File
		####################################################
	
		$fp = fopen(CACHE_DIR . "twitter_img.dat", "w");
	
		foreach ( $cache as $cache_user_name => $data ) {
			$cache_img_url = $data["img_url"];
			$cache_timestamp = $data["timestamp"];
	
			fwrite( $fp, "$cache_user_name|$cache_img_url|$cache_timestamp\n");
		}
		
		fclose( $fp );
	}

	####################################################
	# Create Image Tag
	####################################################

	$result = "<div class='img_margin' style='text-align:left'>"
		. "<a href='$user_page'>"
		. "<img src='$img_url' alt='' />"
		. "</a>"
		. "</div>";

	return $result;
}
?>

変更履歴

2010/02/18
ツイートを非公開にしているユーザの画像を取得できるよう修正。