na0001

PHP5 PEAR JAVA など

CAKEPHPでドコモ i-mode XHTML表示

docomoでCSSを使う場合

レイアウトの先頭に以下を追加

<?php header('Content-Type: application/xhtml+xml; charset=Shift_JIS');?>
na0001na0001コメント(0)トラックバック(0)  

Munin(サーバー監視)で ServersMan@VPS (CentOS) を監視 

munin インストール&設定 – ServersMan@VPSを参考にしてインストールは成功しましたが、

http://サーバーURL/muninでアクセスするとbasic認証を求められます。

rootで

#htpasswd -c /etc/munin/munin-htpasswd ユーザー名

を行いユーザーとパスワードを設定すると見れます。

na0001na0001コメント(0)トラックバック(0)  
カテゴリ: linux  ServersMan@VPS 

javascriptのみでクロスドメインのRSS取得

コチラを参考にしまいした。

<html><head>
<script type="text/javascript" 
src="http://www.google.com/jsapi"></script>
<script type="text/javascript" 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
</script>
<script type="text/javascript">
google.load("feeds", "1");

var rssFeedUrl = "http://blog.livedoor.jp/na0001/rss.html";

$.gFeed = function(url, options, callback){
  var opt = $.extend({q: url, v: '1.0', num: 10}, options);
  if (!opt.q) return false;
  $.getJSON('http://ajax.googleapis.com/ajax/services/feed/load?callback=?',
  opt,
  function(data){
   if (data) callback.call(this, data.responseData.feed);
  }
);
}

$(function() {
	$.gFeed(rssFeedUrl, {},
		function(feed){
			$(feed.entries).each(function() {
				$("#feed").append("<p><a href=" + this.link + 
" target='_blank'>" + createDateString(this.publishedDate) 
+ " " + this.title + "</a></p>");
			});
		}
	);
});

function createDateString(publishedDate)
{
 var pdate = new Date(publishedDate);
 var pday = pdate.getDate();
 var pmonth = pdate.getMonth() + 1;
 var pyear = pdate.getFullYear();
 var phour = pdate.getHours();
 var pminute = pdate.getMinutes();
 var psecond = pdate.getSeconds(); 
 var strdate = pyear + "-" + pmonth + "-" + pday ;
 return strdate;
} 
</script>
</script>
</head>
<body><div id="feed"></div></body>
</html>
na0001na0001コメント(0)トラックバック(0)  
カテゴリ: プログラム 

Twitter API を PHP4 で使う GET編

TwitterAPIを使って検索してみます。

MOTOOLOGUEさんを参考にしました。

  1. カスターマキー、アクセストークン等を取得してください。参考
  2. 受け取る値はjson形式なので「Jsphonをcodereposにアップロードしました。」を参考にしてJsphonをインストール。
  3. HTTP::Requestもpearでインストール
<?php
require_once("HTTP/Request.php");
require_once("Jsphon/Decoder.php");

	//URLエンコード RFC3986版
	function _rawurlencode($str)
	{
	    $str = rawurlencode($str);
	    $str = str_replace('+', ' ', $str);
	    $str = str_replace('%7E', '~', $str);
	    return $str;
	}

	//hash_hmac('sha1', $data, $key, true)の代わり
	function _hmacsha1($key, $data)
	{
	    $blocksize = 64;
	    $hashfunc = 'sha1';
	    if (strlen($key) > $blocksize) $key = pack('H*', $hashfunc($key));
	    $key = str_pad($key, $blocksize, chr(0x00));
	    $ipad = str_repeat(chr(0x36), $blocksize);
	    $opad = str_repeat(chr(0x5c), $blocksize);
	    $hmac = pack('H*', $hashfunc(($key^$opad). pack('H*', $hashfunc(($key^$ipad). $data))));
	    return $hmac;
	}
//投げる変数類設定
		$request_param = array(
          //〜search.json?q=検索語
		    'q' => 検索語,
		    'oauth_consumer_key' => カスタマーキー,
		    'oauth_nonce' => md5(uniqid(mt_rand(), TRUE)),
		    'oauth_signature_method' => 'HMAC-SHA1',
		    'oauth_token' => アクセストークン,
		    'oauth_timestamp' => time(),
		    'oauth_version'=> '1.0',
		);

		//変数名でソート
		$request_sorted = $request_param;
		ksort($request_sorted);

		//Sigunatureのベーステキストを作成
		$request_queries = array();
		foreach ($request_sorted as $k => $v) $request_queries[] = $k. '='._rawurlencode($v);
		$request_query = implode('&', $request_queries);

		//それぞれをURLエンコードして接続 この場合GET
		$twtr_signature_base  = "GET&";
		$twtr_signature_base .= _rawurlencode($request_uri). '&';
		$twtr_signature_base .= _rawurlencode($request_query);

		//Signatureの作成
		$twtr_keys = _rawurlencode(カスタマーシークレット). '&'. _rawurlencode(アクセスシークレット);
		$request_param['oauth_signature'] =base64_encode(_hmacsha1($twtr_keys,$twtr_signature_base));

		//HTTPヘッダーに追加するAuthorizationパラメータ作成
		$request_headers = array();
		foreach ($request_param as $k => $v) $request_headers[] = $k. '="'._rawurlencode($v). '"';
		unset($request_headers[0]); //最初に定義したパラメータリストからqのみ撤去
		$request_header = 'OAuth realm="'. $request_domain. '", '. implode(', ', $request_headers);


		$url = 'http://search.twitter.com/search.json';
		$request = &new HTTP_Request($url);
		$request->setMethod(HTTP_REQUEST_METHOD_GET);
		$request->addHeader('Authorization', $request_header);
		$request->addQueryString("q", 検索語) ;
		$request->sendRequest();
		$json = new Jsphon_Decoder();

		$respo = $json->decode($request->getResponseBody());
na0001na0001コメント(0)トラックバック(0)  
カテゴリ: PHP 

PHP4 PEAR でエラー Warning: sortpackagesforinstall(Structures/Graph.php)

PHP4でpearを使ってHTTP_Requestモジュールをインストールしようとしたとき以下のエラーが

Warning: sortpackagesforinstall(Structures/Graph.php): failed to open stream: No such file or directory in PEAR/Downloader.php on line 1217

*解決した方法

Structures_Graphモジュールをダウンロードして解答後、Structuresフォルダーをpearの各モジュールが存在するフォルダーにコピーしたらうまくいった。

na0001na0001コメント(0)トラックバック(0)  
カテゴリ: PHP  PEAR 

今流行のtwitter OAuthをperlで その2

その2作業

  1. twitter認証画面で認証後、コールバックURL(このCGI)にリダイレクト、URLからオーストークン、オースベリファイアを取得
  2. アクセストークン取得APIを使ってアクセストークンとアクセスシークレットを取得。

注意 以下のコードはセキュリティとパフォーマンスにつては考慮していないので責任は持てませんよろしくお願いします。

#!/usr/bin/perl -w

 use strict;
 use warnings;
 use Encode ();
 use CGI;
 use CGI::Cookie;
 use LWP::UserAgent;
 use Net::OAuth;
 use Data::Random qw(rand_chars);
 use Template;
 use CGI::Carp qw(fatalsToBrowser);
 use Data::Dumper;
 use URI::Escape;
 use XML::Simple;

$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;

my $q = CGI->new;
#オーストークン、オースベリファイアを取得
my $oauth_token = $q->param('oauth_token');
my $oauth_verifier = $q->param('oauth_verifier');
my $access_token_url = 'http://twitter.com/oauth/access_token';
my $request_method = 'POST';
my $ClientUA_name = 'XXXX';

my $request = Net::OAuth->request("access token")->new(
    consumer_key => 'Twitterから取得したキー',
    consumer_secret => 'Twitterから取得しシークレット',
    request_url => $access_token_url,
    request_method => $request_method,
    signature_method => 'HMAC-SHA1',
    timestamp => time,
    nonce => join('', rand_chars(ssize => 16, set => 'alphanumeric')),
    callback => '',
    token => $oauth_token,
    verifier => $oauth_verifier,
    token_secret => '',
    );

my $ua = LWP::UserAgent->new;
my $http_hdr = HTTP::Headers->new('User-Agent' => $ClientUA_name);
my $http_req = HTTP::Request->new($request_method, $access_token_url,$http_hdr, $request->to_post_body);
my $http_res = $ua->request($http_req);
my $res_data = $http_res->content;
if($res_data =~/error/){
#エラー処理
}else{
	my $AccessToken = Net::OAuth->response('access token')->from_post_body($res_data);
	my $access_token = $AccessToken->token;
	my $access_token_secret = $AccessToken->token_secret;
}
na0001na0001コメント(0)トラックバック(0)  
カテゴリ: プログラム  perl 

今流行のtwitter OAuthをperlで その1

暇なときブログさんを参考にしました。

事前に http://dev.twitter.com/ で app として登録しておくこと

Aplication TypeはBrowserで登録の事

今回の作業

  1. 今回はリクエストトークン取得APIを使ってリクエストトークンとシークレットトークンを取得
  2. リクエストトークンと認証URLを使ってリダイレクト

注意 以下のコードはセキュリティとパフォーマンスにつては考慮していないので責任は持てませんよろしくお願いします。

#!/usr/bin/perl -w

 use strict;
 use warnings;
 use CGI;
 use LWP::UserAgent;
 use Net::OAuth;
 use Data::Random qw(rand_chars);
$CGI::POST_MAX = 1024 * 1024;
$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;

my $request_token_url = 'http://twitter.com/oauth/request_token';
my $request_method = 'GET';

my $request = Net::OAuth->request("request token")->new(
    consumer_key 	=> 'Twitterから取得したキー',
    consumer_secret => 'Twitterから取得しシークレット',
    request_url => $request_token_url,
    request_method => $request_method,
    signature_method => 'HMAC-SHA1',
    timestamp => time,
#ランダム文字列 Data::Random qw(rand_chars)
    nonce => join('', rand_chars(ssize => 16, set => 'alphanumeric')),
#twitterの認証画面後の飛び先
    callback => 'http://xxxxxxx/twite/twite_auth.cgi'
    );

$request->sign;

my $ua = LWP::UserAgent->new;
my $http_hdr = HTTP::Headers->new('Authorization' => $request->to_authorization_header);
my $http_req = HTTP::Request->new($request_method, $request_token_url, $http_hdr);
my $http_res = $ua->request($http_req);

my $RequestTokenALL = Net::OAuth->response('request token')->from_post_body($http_res->content);
my $authorize_url = 'http://twitter.com/oauth/authorize';
my $request_token = $RequestTokenALL->token;
my $request_token_secret = $RequestTokenALL->token_secret;

my $q = new CGI;

#twitter認証画面へリダイレクト
print $q->redirect(-url => $authorize_url."?oauth_token=".$request_token);

この記事をクリップ!

na0001na0001コメント(0)トラックバック(0)  
カテゴリ: プログラム  perl 

PHPExcelを使ってみた。

前準備

 $objPHPExcel = new PHPExcel();

 $objPHPExcel->setActiveSheetIndex(0);

 $sheet = $objPHPExcel->getActiveSheet();

 $sheet->setTitle('シートタイトル');

セルの幅の指定

 $sheet->getColumnDimension('A')->setWidth(15);

セルの幅の自動調整

 $sheet->getColumnDimension('A')->setAutoSize(true);

セルの数字座標指定で装飾 例A1 Aは0になる。

 $style = $sheet->getStyleByColumnAndRow(0,1);

セルのフォント指定

 $style->getFont()->setName('MS Gothic');

セルの太字フォント指定

 $style->getFont()->setBold(true);

セルのフォントサイズ指定

 $style->getFont()->setSize(8);

セルの折り返し指定

 $style->getAlignment()->setWrapText(true);

セルに書き込み

 $sheet->setCellValueByColumnAndRow(0, 1, '書き込み内容');

セル内改行

 "1行目\r\n2行目"

na0001na0001コメント(0)トラックバック(0)  
カテゴリ: PHP 

Warning: Cannot modify header information - headers already sent エラー

PHPのプログラムで以下のような警告がでたら
「Warning: Cannot modify header information - headers already sent」
改行コードをLINUXサーバーなら「LF」に変えて保存すると直る場合がある。

na0001na0001コメント(0)トラックバック(0)  
カテゴリ: WEB  PHP 

cronを使ってpostgresのバックアップ

postgresユーザーで
crontab -e

SHELL=/bin/sh
15 3 * * * /usr/bin/pg_dump -D dbname -f 折り返し
環境によって変える部分/pgsql/backups/dbname_daily.sql
10 3 * * sun /usr/bin/pg_dump -D dbname -f 折り返し
環境によって変える部分/pgsql/backups/dbname_weekly.sql
25 3 28 * * /usr/bin/pg_dump -D dbname -f 折り返し
環境によって変える部分/pgsql/backups/dbname_monthly.sql

#VACUUM
0 3 2 * * /usr/bin/vacuumdb -a -f -z -q

na0001na0001コメント(0)トラックバック(0)  
カテゴリ: postgres