developer's diary

最近はc#のエントリが多いです

twitter投稿用のプログラムを少し修正してみる。

http://ja.doukaku.org/278/lang/php/ を少し修正してみました。

<?php

// php this.php -u user -p pass -s "status"
$options = getopt('u:p:s:');

$errmsg="";
if (!isset($options["u"]) ) { 
	$errmsg .= "-u ユーザ名\n";
}
if (!isset($options["p"]) ) { 
	$errmsg .= "-p パスワード\n";
}
if (!isset($options["s"]) ) { 
	$errmsg .= "-s メッセージ\n";
}
if(!empty($errmsg)){
	echo "オプションが足りません\n".$errmsg;
	exit(1);
}

echo(TwitterUpdate($options['u'], $options['p'], $options['s']));

function TwitterUpdate($user, $pass, $status){

	$request  = "POST /statuses/update.xml HTTP/1.0\r\n";
	$request .= "Host: twitter.com\r\n";
	$request .= "User-Agent: PHP/".phpversion()."\r\n";
	$request .= "Authorization: Basic ".base64_encode($user.":".$pass)."\r\n";
	$postdata = "status=".urlencode(mb_convert_encoding($status, 'UTF-8', 'SJIS'));
	$request .= "Content-Type: application/x-www-form-urlencoded\r\n";
	$request .= "Content-Length: ".strlen($postdata)."\r\n";
	$request .= "\r\n";
	$request .= $postdata;

	$fp = fsockopen('twitter.com', 80, $errno, $errstr, 30);
	if (!$fp) {
	    die("$errstr ($errno)\n");
	}

	fputs($fp, $request);

	$response = "";
	while (!feof($fp)) {
		$response .= fgets($fp, 4096);
	}

	fclose($fp);

	return $response;
}

って引数のバリデーションを入れただけですが・・・

 *** twitter.php.org	2010-08-17 00:38:16.459381900 +0900
 --- twitter.php	2010-08-17 00:43:01.699696700 +0900
***************
*** 1,9 ****
  <?php
      // php this.php -u user -p pass -s "status"
      $options = getopt('u:p:s:');
      echo(TwitterUpdate($options['u'], $options['p'], $options['s']));
! ?>
! <?php
  function TwitterUpdate($user, $pass, $status)
  {
      $request  = "POST /statuses/update.xml HTTP/1.0\r\n";
--- 1,25 ----
  <?php
      // php this.php -u user -p pass -s "status"
      $options = getopt('u:p:s:');
+ 
+     $errmsg="";
+     if (!isset($options["u"]) ) { 
+         $errmsg .= "-u ユーザ名\n";
+     }
+     if (!isset($options["p"]) ) { 
+         $errmsg .= "-p パスワード\n";
+     }
+     if (!isset($options["s"]) ) { 
+         $errmsg .= "-s メッセージ\n";
+     }
+     if(!empty($errmsg)){
+         echo "オプションが足りません\n".$errmsg;
+         exit(1);
+     }
+ 
      echo(TwitterUpdate($options['u'], $options['p'], $options['s']));
! 
! 
  function TwitterUpdate($user, $pass, $status)
  {
      $request  = "POST /statuses/update.xml HTTP/1.0\r\n";