Java、PHP、Perl、JavaScriptなどプログラミングTips集

ノウハウとしてパソコンに貯めてたJavaソースもろともHDDがクラッシュしてしまったので、Web上に残すことにしました。Javaプログラミングでインターネット上の作業自動化を目指します。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。
Amazonで書籍を探す: Java  PHP  Perl  JavaScript  ActionScript  アルゴリズム  デザインパターン  プログラミング  オブジェクト指向  Ajax  PostgreSQL
ブログ村で他のブログを探す:
にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ ソフトウェアへ  にほんブログ村 IT技術ブログ プログラム・プログラマへ
この記事を・・・ Twitterでつぶやく  Googleブックマークする  Yahoo!ブックマークする  livedoorクリップする  newsingする  Choixする  Buzzurlする  イザ!ブックマークする  FC2ブックマークする  ニフティクリップする  del.icio.usする  はてなブックマークする

【PHP】ログ風に出力するtwitterのアプリを作ってみた(※ただし、閲覧に限る) 〜 後編 〜

前回の続きです。
【PHP】ログ風に出力するtwitterのアプリを作ってみた(※ただし、閲覧に限る) 〜 前編 〜
今回の課題は、APIを使ってフォローしている人のIDを取得することです。
friendsというAPIにscreen_nameを渡して取得します。

http://twitter.com/statuses/friends.json


下記のようにクラスにしてみました。
<?php
class GetFriends100{

private $screen_name;

public function __construct($screen_name){
$this->screen_name = $screen_name;
}

public function getUsers(){
$cnt = 0;

$callstr = "http://twitter.com/statuses/friends.json?screen_name=".$this->screen_name;
$ch = curl_init($callstr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$apiresponse = curl_exec($ch);
curl_close($ch);

if ($apiresponse) {
$json = json_decode($apiresponse);

$usrs = $json->users;
foreach( $usrs as $u ) {
print("[".$cnt."]".$u->id.":".$u->name."\n");
$cnt++;
}
}
}
}
?>
このクラスのインスタンスを生成して、getUsers()を実行してもらえばわかりますが、100件までしか取得できません。100件以上を取得するには、cursorというパラメータに取得した個所のcursor値を設定してやる必要があります。1〜100件の場合はcursor=-1を設定してやり、101〜200を取得する場合は、最初に取得した100件のjson情報の中にnext_cursorという項目があるので、next_cursor_strに格納されている値をcursor値としてapiを実行します。しかも、cursorパラメータを使う場合は、使わない場合にくらべて微妙にjson情報の形式が異なるので注意が必要です。これをプログラムにすると以下のようになります。
<?php
class GetFriends{

private $screen_name;

public function __construct($screen_name){
$this->screen_name = $screen_name;
}

public function getUsers(){
$cursor = -1;
$cnt = 0;
$usrids = "";

do {
$callstr = "http://twitter.com/statuses/friends.json?screen_name=".$this->screen_name."&cursor=".$cursor;
$ch = curl_init($callstr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$apiresponse = curl_exec($ch);
curl_close($ch);

if ($apiresponse) {
$json = json_decode($apiresponse);

$usrs = $json->users;
foreach( $usrs as $u ) {
print("[".$cnt."]".$u->id.":".$u->name."\n"); // 取得ユーザ表示用

if( $cnt == 0 ) {
$usrids = $u->id;
}else {
$usrids = $usrids.",".$u->id;
}

$cnt++;
}
$cursor = $json->next_cursor_str;
}
}while( $cursor > 0 );
return $usrids;
}
}
?>
取得できる情報がなくなると、next_cursorの値は0に設定されます。このプログラムでは全て取得する(next_cursorが0になる)までフォローしているユーザ情報を取得します。また、前回のダダ流しプログラムにIDのパラメタを渡せるように、IDの羅列を作って戻り値とします。

これを前回のプログラムと連結し、follow APIにIDの羅列を渡すようにします。そして、ログ風ということで、表示する際に時間の情報も付加したいと思います。
続きを読む・・
Amazonで書籍を探す: Java  PHP  Perl  JavaScript  ActionScript  アルゴリズム  デザインパターン  プログラミング  オブジェクト指向  Ajax  PostgreSQL
ブログ村で他のブログを探す:
にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ ソフトウェアへ  にほんブログ村 IT技術ブログ プログラム・プログラマへ
この記事を・・・ Twitterでつぶやく  Googleブックマークする  Yahoo!ブックマークする  livedoorクリップする  newsingする  Choixする  Buzzurlする  イザ!ブックマークする  FC2ブックマークする  ニフティクリップする  del.icio.usする  はてなブックマークする

【PHP】ログ風に出力するtwitterのアプリを作ってみた(※ただし、閲覧に限る) 〜 前編 〜

特にtwitterクライアントアプリを使わずに、Webだけでtwitterをやっていたのですが、つぶやきが届くたびに何度もクリックしなければならないことに、煩わしく思っていました。
WS000203.jpg
まぁ、クリックするまでは、表示されずに画面が固定というのがメリットですが、そんなにフォローしているわけではないので、理想を言えば、
・フォローしている人のつぶやきを自動的に流して表示させる
となって欲しいわけです。こんな風に↓
WS000204.jpg


まず、つぶやきのタイムラインを取得するには、apiでタイムラインをポーリングして取得するやり方などが紹介されてますが、APIの実行回数の制限や、ポーリング間隔によるタイムラグなど、あるようです。(pull型 API)
なので、ここでは、push型のAPIである、streaming APIを使って、つぶやきをダダ流しにしてみたいと思います。
<?php
$user = 'username';
$password = 'password';
$url = "http://{$user}:{$password}@stream.twitter.com/spritzer.json";
$stream = fopen($url, "r");
while ($json = fgets($stream)) {
$twitter= json_decode($json,true);
if( isset($twitter['text']) ) {
print $twitter['user']['name'].':'.$twitter['text'] . PHP_EOL;
}
}
?>

これを実行すると恐ろしいほどの量のつぶやきが流れて出てきますwこれは、ただ単に世界中のつぶやきを表示しているだけです。世界中とは言え、今回使用したspritzerというstreaming APIは精度が低く、世界中のつぶやき全部を拾っているわけではないようです。試しにプログラム実行中に、Webからつぶやいてみましたが、表示されませんでした・・orz
これより、精度の良いAPIも存在しますが、twitterとの契約が必要とのこと。なので、このダダ流しにしているつぶやきに文字列処理などのフィルタをかけても、漏れが多いわけです。
一応、日本語だけ取得するというプログラムだけ紹介しておきます。
if(preg_match('/[ァ-ヶーぁ-ん]/u',$twitter['text'])) {
print $twitter['user']['name'].':'.$twitter['text'] . PHP_EOL;
}
これは、出力するつぶやきを正規表現で日本語に絞っています。これで少しは意味のあるダダ流しになったのでは、ないかと思います。

というわけで、ダダ流すつぶやきをIDで指定して出力できるようにfollowというAPIで実装してみたいと思います。
続きを読む・・
Amazonで書籍を探す: Java  PHP  Perl  JavaScript  ActionScript  アルゴリズム  デザインパターン  プログラミング  オブジェクト指向  Ajax  PostgreSQL
ブログ村で他のブログを探す:
にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ ソフトウェアへ  にほんブログ村 IT技術ブログ プログラム・プログラマへ
この記事を・・・ Twitterでつぶやく  Googleブックマークする  Yahoo!ブックマークする  livedoorクリップする  newsingする  Choixする  Buzzurlする  イザ!ブックマークする  FC2ブックマークする  ニフティクリップする  del.icio.usする  はてなブックマークする

【 #PHP 】 #twitter のハッシュタグにグルーピングされているRSSを取得

Webサイトの情報をtwitterで更新したい場合、以下のようにすれば便利だと思います。
1.twitterで特定のハッシュタグ(例:#kurofit)を付加して投稿する
2.Webサイトでは、#kurofitのRSSを取得する
3.Webサイトで取得したRSSを表示する。

RSSの取得に関してはmagpierssを使った前回の記事を参照ください。
【PHP】magpierssを使ってWebでRSSパーサ

サンプルとして、以下のようなクラスを作成しました。
twitterHashRss.php
<?php
// エンコーディングの設定
define("MAGPIE_OUTPUT_ENCODING","UTF-8");
// twitterユーザ名
define("TWITTER_USER_NAME","kurofit");

require_once("magpierss/rss_fetch.inc");
/**
* twitterHashRssクラス
*
* @package twitterHashRss
*/
class twitterHashRss {
private $rss;
private $hashtag;
/**
* twitterHashRss()
*
* @param $hashtag ハッシュタグ文字列
* @return void
*/
function twitterHashRss($tag)
{
$url = "http://search.twitter.com/search.atom?q=%23".$tag;
$this->rss = fetch_rss( $url );
$this->hashtag = $tag;
}

/**
* ハッシュタグのRSSからHTML生成
*
* @param $cnt RSS取得件数(最大で15件)
* @return string
*/
function getHtml($cnt) {
$html = "<ul>";

$lineCnt = 0;
$locRss = $this->rss;
for($line=0;$line < isset($locRss->items[$line]); ++$line) {

$item = $locRss->items[$line];
// ユーザ名でフィルタをかける
if( false !== strpos($item['author_name'], TWITTER_USER_NAME) ){
++$lineCnt;
if( $cnt < $lineCnt ) {
// 指定回数を超えた
break;
}
$title = mb_convert_encoding($item['title'],"UTF-8","auto");
$modi = mb_convert_encoding($item['updated'],"UTF-8","auto");
// 余分な文字列を削除
$title = str_replace("#".$this->hashtag, "", $title);

// 出力
$html = $html."<li>".$title." ".date('Y/m/d', strtotime($modi))." up</li>";
}
}
$html = $html."</ul>";
if( 0 === $lineCnt ) {
$html = "none";
}
return $html;
}

/**
* ハッシュタグのRSSからHTML生成
*
* @param $cnt RSS取得件数(最大で15件)
* @return string
*/
function getLinkedHtml($cnt) {
$html = "<ul>";

$lineCnt = 0;
$locRss = $this->rss;
for($line=0;$line < isset($locRss->items[$line]); ++$line) {

$item = $locRss->items[$line];
if( false !== strpos($item['author_name'], SITE_AUTHOR) ){
++$lineCnt;
$href = mb_convert_encoding($item['link'],"UTF-8","auto");
$title = mb_convert_encoding($item['title'],"UTF-8","auto");
$modi = mb_convert_encoding($item['updated'],"UTF-8","auto");

// 余分な文字列を削除
$title = str_replace("#".$this->hashtag, "", $title);

// 出力
$html = $html."<li><a href=".$href.">".$title."</a> ".date('Y/m/d', strtotime($modi))." up</li>";
if( $cnt < $lineCnt ) {
// 指定回数を超えた
break;
}
}
}
$html = $html."</ul>";
if( 0 === $lineCnt ) {
$html = "none";
}
return $html;
}
}
?>

コンストラクタではハッシュタグを渡して、RSSを取得しておきます。getHtml関数または、getLinkedHtml関数で取得したRSSから表示用のHTMLを作成します。getHtml関数とgetLinkedHtml関数の違いは、表示用HTMLにリンクを貼るかどうかだけの違いです。

上部でTWITTER_USER_NAMEを定義しているのは、ハッシュタグで自分が投稿したものだけをフィルタリングするためにユーザ名を定義するようにしています。他の方が投稿した内容もサイトに表示させたい場合は、このフィルタリング処理を削除してください。

このRSS取得プログラムで注意しなければいけないことは、twitterのRSSは15件までしか取得できない点です。いくらtwitterのサイトでハッシュタグがグルーピングしてくれるとは言え、RSSは15件しか吐かないのです。Max15件を踏まえてgetHtml関数または、getLinkedHtml関数をcallするときは、件数を指定してください。

なお、str_replaceでハッシュタグ文字列を置換で消しているのは、特に必要ないと思ったからです。

このクラスのインスタンスを生成する例は次の通りです。
続きを読む・・
Amazonで書籍を探す: Java  PHP  Perl  JavaScript  ActionScript  アルゴリズム  デザインパターン  プログラミング  オブジェクト指向  Ajax  PostgreSQL
ブログ村で他のブログを探す:
にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ ソフトウェアへ  にほんブログ村 IT技術ブログ プログラム・プログラマへ
この記事を・・・ Twitterでつぶやく  Googleブックマークする  Yahoo!ブックマークする  livedoorクリップする  newsingする  Choixする  Buzzurlする  イザ!ブックマークする  FC2ブックマークする  ニフティクリップする  del.icio.usする  はてなブックマークする

【PHP】magpierssを使ってWebでRSSパーサ

WebサイトにブログのRSSを表示さる場合、magpierssを使うと簡単に、RSSを取得でき解析もできます。

magpierssはコチラからダウンロードし、ファイルを解凍。サーバにUPしてください。

magpierssを使ったRSS取得例↓
<?php
require_once("magpierss/rss_fetch.inc");
// エンコーディングの設定
define("MAGPIE_OUTPUT_ENCODING","UTF-8");

//取得するRSSのURL
$url = "http://harukofarm.jugem.jp/?mode=atom";
$rss = fetch_rss( $url );
// 最新件数10件に限定
array_splice($rss->items, 10);

header("Content-type:text/html;charset=UTF-8");
foreach ($rss->items as $item) {
// RSSからデータを取得
$href = mb_convert_encoding($item['link'],"UTF-8","auto");
$title = mb_convert_encoding($item['title'],"UTF-8","auto");
$modi = mb_convert_encoding($item['modified'],"UTF-8","auto");
// 取得したデータをHTMLとして組み立てる
$recentInfo = $recentInfo." ・<a href=$href>$title</a> ".date('Y/m/d', strtotime($modi))." up<BR>";
}
print($recentInfo);
?>

MAGPIE_OUTPUT_ENCODINGはmagpierssを使う場合に、必須のcharsetの定義です。これを省略すると、文字化けします。
この例ではJugemブログのRSSを取得しています。
このHTMLの表示例は以下のようになります。
WS000200.jpg
Amazonで書籍を探す: Java  PHP  Perl  JavaScript  ActionScript  アルゴリズム  デザインパターン  プログラミング  オブジェクト指向  Ajax  PostgreSQL
ブログ村で他のブログを探す:
にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ ソフトウェアへ  にほんブログ村 IT技術ブログ プログラム・プログラマへ
この記事を・・・ Twitterでつぶやく  Googleブックマークする  Yahoo!ブックマークする  livedoorクリップする  newsingする  Choixする  Buzzurlする  イザ!ブックマークする  FC2ブックマークする  ニフティクリップする  del.icio.usする  はてなブックマークする

PHPファイルで簡易アクセス解析 〜中編 〜

PHPファイルで簡易アクセス解析 〜前編 〜

の続きです。前回は、取得した情報をただひたすらログファイルに書き込むソースでした。このままでは、膨大なサイズのログファイルが形成されてしまいます。

ここでは、アクセス解析というよりは、ログファイルのファイル処理について触れたいと思います。

ログファイルの仕様としては、

特定のログファイルが100KBを超えた場合、日付と時刻のファイル名でリネームする



前回のソースに次のようなコードを記述してやります。
define(LOG_FILE_PATH, "./");			// 文字列の終端は「/」で終わること
define(LOG_FILE_NAME, "access.log");
define(LOG_FILE_SIZE_MAX, 100 * 1024); // 最大ログファイルサイズ(100KB)

$log_file = LOG_FILE_PATH.LOG_FILE_NAME;

// ログファイルが存在するか?
if( file_exists($log_file) ) {

if( LOG_FILE_SIZE_MAX < filesize($log_file) ) {
// 現在の日付を取得
$time_date = gmdate("YmdHi", time() + 60*60*9);
// ログファイルを移動する
$new_file = LOG_FILE_PATH.$time_date."_".LOG_FILE_NAME;
rename($log_file, $new_file);
}
}

このままでも十分良いのですが、長期間運営する場合に、ハードディスクのリソースを著しく消費してしまいます。また、手動で削除してやる必要が出てきます。このことを回避するために、ログファイルにはサイクリックな機構を実装してやる必要があります。要は、ある程度のログファイルが増えたら削除する処理です。

define(LOG_FILE_PATH, "./");			// 文字列の終端は「/」で終わること
define(LOG_FILE_NAME, "access.log");
define(LOG_FILE_SIZE_MAX, 100 * 1024); // 最大ログファイルサイズ(100KB)
define(LOG_FILE_COUNT_MAX, 50); // 保持するログファイルの数

$log_file = LOG_FILE_PATH.LOG_FILE_NAME;

// ログファイルが存在するか?
if( file_exists($log_file) ) {

if( LOG_FILE_SIZE_MAX < filesize($log_file) ) {
// 現在の日付を取得
$time_date = gmdate("YmdHis", time() + 60*60*9);
// ログファイルを移動する
$new_file = LOG_FILE_PATH.$time_date."_".LOG_FILE_NAME;
rename($log_file, $new_file);

$log_file_count = 0;
// 降順でログディレクトリのファイル一覧を取得
$log_files = scandir(LOG_FILE_PATH, 1);
// ログファイルのカウント
for($file_cnt = 0; isset($log_files[$file_cnt]); $file_cnt++ ) {
if( 0 < strrpos($log_files[$file_cnt], LOG_FILE_NAME) ) {
// *access.logファイルの数をカウント
$log_file_count++;
if( $log_file_count > LOG_FILE_COUNT_MAX ) {
// 保持ログ数を超えたファイルを削除
unlink(LOG_FILE_PATH.$log_files[$file_cnt ]);
}
}
}

}
}

このプログラムでは、50個のログファイルを保持します。合計5MBのハードディスク容量を消費し、それ以上は増えないようにしてます。
もっと理想を言えば、この処理はここに実装しないで、別の定期処理として動かしてやる方が良いでしょう。100KBに1回の処理とは言え、アクセスがあったときにループを50回まわすので、わずかではありますが、ページ表示速度に影響するでしょう。

【関連記事】
PHPファイルで簡易アクセス解析 〜前編 〜
Amazonで書籍を探す: Java  PHP  Perl  JavaScript  ActionScript  アルゴリズム  デザインパターン  プログラミング  オブジェクト指向  Ajax  PostgreSQL
ブログ村で他のブログを探す:
にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ ソフトウェアへ  にほんブログ村 IT技術ブログ プログラム・プログラマへ
この記事を・・・ Twitterでつぶやく  Googleブックマークする  Yahoo!ブックマークする  livedoorクリップする  newsingする  Choixする  Buzzurlする  イザ!ブックマークする  FC2ブックマークする  ニフティクリップする  del.icio.usする  はてなブックマークする

PHPファイルで簡易アクセス解析 〜前編 〜

PHPで簡易的にアクセス解析を行う方法を記載します。アクセス解析の概要は、
1.アクセス情報を収集する
2.収集した情報をファイルへ出力する
3.ファイルに蓄積した情報を見やすく表示する

の3点です。まずは、アクセス情報を収集してみたいと思います。
収集する情報は、
・アクセス時間
・アクセスページ
・リンク元
・IP
・リモートホスト
・ブラウザ情報(ユーザエージェント)

これらを踏まえて、まずはコーディング↓

accessCounter.php
// 現在の日付を取得
$time_date = gmdate("Y/m/d", time()+60*60*9);
// 現在の時刻を取得
$time_now = gmdate("H:i", time()+60*60*9);

// アクセスページの記録
$access_url = "http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];

// IPアドレスを取得
$ip = getenv("REMOTE_ADDR");

// ホスト情報を取得する
$host = getenv("REMOTE_HOST");
if( !$REMOTE_HOST ) {
$host = gethostbyaddr($ip);
}

// 直前のURLを取得する
$prv_url = getenv("HTTP_REFERER");
if( $prv_url == "" ) {
$prv_url = "お気に入り or 直リンク";
}

// ブラウザ(クライアントソフト)の取得
$client = getenv("HTTP_USER_AGENT");

で、これらをファイルへ出力していきます。
続きを読む・・
Amazonで書籍を探す: Java  PHP  Perl  JavaScript  ActionScript  アルゴリズム  デザインパターン  プログラミング  オブジェクト指向  Ajax  PostgreSQL
ブログ村で他のブログを探す:
にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ ソフトウェアへ  にほんブログ村 IT技術ブログ プログラム・プログラマへ
この記事を・・・ Twitterでつぶやく  Googleブックマークする  Yahoo!ブックマークする  livedoorクリップする  newsingする  Choixする  Buzzurlする  イザ!ブックマークする  FC2ブックマークする  ニフティクリップする  del.icio.usする  はてなブックマークする

getenvで取得できる環境変数

variable specification
SERVER_SOFTWARE The name and version of the information server software answering the request (and running the gateway). Format: name/version
SERVER_NAME The server's hostname, DNS alias, or IP address as it would appear in self-referencing URLs.
GATEWAY_INTERFACE The revision of the CGI specification to which this server complies. Format: CGI/revision
SERVER_PROTOCOL The name and revision of the information protcol this request came in with. Format: protocol/revision
SERVER_PORT The port number to which the request was sent.
REQUEST_METHOD The method with which the request was made. For HTTP, this is "GET", "HEAD", "POST", etc.
PATH_INFO The extra path information, as given by the client. In other words, scripts can be accessed by their virtual pathname, followed by extra information at the end of this path. The extra information is sent as PATH_INFO. This information should be decoded by the server if it comes from a URL before it is passed to the CGI script.
PATH_TRANSLATED The server provides a translated version of PATH_INFO, which takes the path and does any virtual-to-physical mapping to it.
SCRIPT_NAME A virtual path to the script being executed, used for self-referencing URLs.
QUERY_STRING The information which follows the ? in the URL which referenced this script. This is the query information. It should not be decoded in any fashion. This variable should always be set when there is query information, regardless of command line decoding.
REMOTE_HOST The hostname making the request. If the server does not have this information, it should set REMOTE_ADDR and leave this unset.
REMOTE_ADDR The IP address of the remote host making the request.
AUTH_TYPE If the server supports user authentication, and the script is protects, this is the protocol-specific authentication method used to validate the user.
REMOTE_USER If the server supports user authentication, and the script is protected, this is the username they have authenticated as.
REMOTE_IDENT If the HTTP server supports RFC 931 identification, then this variable will be set to the remote user name retrieved from the server. Usage of this variable should be limited to logging only.
CONTENT_TYPE For queries which have attached information, such as HTTP POST and PUT, this is the content type of the data.
CONTENT_LENGTH The length of the said content as given by the client.
HTTP_ACCEPT The MIME types which the client will accept, as given by HTTP headers. Other protocols may need to get this information from elsewhere. Each item in this list should be separated by commas as per the HTTP spec.
HTTP_USER_AGENT The browser the client is using to send the request. General format: software/version library/version.
Amazonで書籍を探す: Java  PHP  Perl  JavaScript  ActionScript  アルゴリズム  デザインパターン  プログラミング  オブジェクト指向  Ajax  PostgreSQL
ブログ村で他のブログを探す:
にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ ソフトウェアへ  にほんブログ村 IT技術ブログ プログラム・プログラマへ
この記事を・・・ Twitterでつぶやく  Googleブックマークする  Yahoo!ブックマークする  livedoorクリップする  newsingする  Choixする  Buzzurlする  イザ!ブックマークする  FC2ブックマークする  ニフティクリップする  del.icio.usする  はてなブックマークする

JavaでWin32APIを呼び出すnlinkサンプル

Javaからwin32 APIを呼ぶ方法はいくつかあります。
C言語で記述したものを呼ぶJNIは、今回は扱いません。また、開発環境にeclipseを使っている方は、SWTを使うと用意にラッパー関数を呼べるようですが、これはサポートしているapiに限りがあるので、扱いません。

ここでは、nlinkというjarファイルをダウンロードして、apiを読んでみることにします。

nlinkを使うと簡単にwin32 apiを呼ぶことができます。

nlink: NLink - Native Library Linker

1.MSDNとかで呼びたいAPIのシグネチャを調べる
2.APIのDLLと同名のインタフェースを作って@DllClassアノテーションを付ける
3.シグネチャに合わせたメソッドを定義して@DllMethodアノテーションを付ける
4.NLink.create()でインタフェースのプロキシを生成して呼び出す。

このサンプルでは、ファイルを読み取り専用にします。 続きを読む・・
Amazonで書籍を探す: Java  PHP  Perl  JavaScript  ActionScript  アルゴリズム  デザインパターン  プログラミング  オブジェクト指向  Ajax  PostgreSQL
ブログ村で他のブログを探す:
にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ ソフトウェアへ  にほんブログ村 IT技術ブログ プログラム・プログラマへ
この記事を・・・ Twitterでつぶやく  Googleブックマークする  Yahoo!ブックマークする  livedoorクリップする  newsingする  Choixする  Buzzurlする  イザ!ブックマークする  FC2ブックマークする  ニフティクリップする  del.icio.usする  はてなブックマークする

PHPでテンプレート化したExcelファイルを操作

Excel_Reviserというモジュールを使うと既存のExcelファイルを操作できます。
こちらよりダウンロードできます。執筆時の最新は0.31betaです。
ダウンロード - Excel_Reviser - SourceForge.JP
このモジュールを使ってExcelの納品書を作成するサンプルを作りました。
<?PHP
// Excel_Reviser本体を include(または require)します。
require_once('../reviser.php');

// reviserのClassオブジェクトを新規に作成します。
$reviser=NEW Excel_Reviser;

// デフォルトは EUC-JPです。機種依存文字に対応するためには
// 文字コードを変更してください。このファイルもその文字コードで
// 保存すること
// $reviser->setInternalCharset('utf-8');

// 空白セルに文字を追加する例です
$reviser->addString(0,5,5, '0123456789');
$reviser->addString(0,5,9, '2009/11/11');

$reviser->addString(0,10,1, '〒680-0441');
$reviser->addString(0,11,1, '鳥取県×××××××××');

$reviser->addString(0,13,1, '佐藤太郎');

$reviser->addString(0,11,6, 'ご注文者と同じ住所');
$reviser->addString(0,16,3, '銀行振込み');

$reviser->addString(0,19,1, '花御所柿6個セットサイズ:2L(ご自宅用)');
$reviser->addNumber(0,19,6, 2980);
$reviser->addNumber(0,19,8, 2);

$reviser->addString(0,20,1, '花御所柿6個セットサイズ:L(ご自宅用)');
$reviser->addNumber(0,20,6, 1980);
$reviser->addNumber(0,20,8, 2);

// 代引き手数料
$reviser->addNumber(0,40,9, 0);
// 送料
$reviser->addNumber(0,41,9, 800);

// 入力出力ファイル名の設定
$readfile='./template/template_receipt.xls'; // テンプレートファイルの指定
$outfile="test.xls"; // 出力するファイル名です

// 最後に書換えを実行します
$reviser->reviseFile($readfile,$outfile)
?>
Amazonで書籍を探す: Java  PHP  Perl  JavaScript  ActionScript  アルゴリズム  デザインパターン  プログラミング  オブジェクト指向  Ajax  PostgreSQL
ブログ村で他のブログを探す:
にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ ソフトウェアへ  にほんブログ村 IT技術ブログ プログラム・プログラマへ
この記事を・・・ Twitterでつぶやく  Googleブックマークする  Yahoo!ブックマークする  livedoorクリップする  newsingする  Choixする  Buzzurlする  イザ!ブックマークする  FC2ブックマークする  ニフティクリップする  del.icio.usする  はてなブックマークする

PostgreSQLで中心座標から5件のデータをソートして取得するSQL

PostgreSQLで中心座標から5件のデータをソートして取得するSQLは以下の通り。

select * from onsen_info order by loc <-> point(0,0) offset 0 limit 5


pointに来る値はGoogle Maps APIのgetCenter()関数で取得できる中心座標をそのままSQL文に付加すればOK。
Amazonで書籍を探す: Java  PHP  Perl  JavaScript  ActionScript  アルゴリズム  デザインパターン  プログラミング  オブジェクト指向  Ajax  PostgreSQL
ブログ村で他のブログを探す:
にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ ソフトウェアへ  にほんブログ村 IT技術ブログ プログラム・プログラマへ
この記事を・・・ Twitterでつぶやく  Googleブックマークする  Yahoo!ブックマークする  livedoorクリップする  newsingする  Choixする  Buzzurlする  イザ!ブックマークする  FC2ブックマークする  ニフティクリップする  del.icio.usする  はてなブックマークする
次のページ

FC2Ad

FC2ブログ