ページ: << 1 ... 88 89 90 91 92 93 94 95 96 97 98 ... 103 >>

昨日の夕立はひどかった

パーマリンク 2008/06/10 10:38:26 著者: kumaold メール
カテゴリ: 仕事, 日々の生活

仕事で恵那まで出向いたその返り際、4時の割に異様に外が暗いんです。
車の前照灯つけないと危ないくらい。

19号を走ってケーズデンキ辺りまできたら突然雨が降り出しました。
しかも強くなる一方で、今まで経験したことないほどの大粒の雨。
最悪の時期には視界が10mあるかないかぐらいでした。

おかげで谷間になっているこの辺りを通過したときに10cmほど冠水していたため、激しく水をかぶってしまい、エンジンの調子がまた悪くなってしまいましたorz


後で気象庁HP見たら恵那で10分間に11.5ミリ(70ミリ/h相当)の降水だとか!


工業団地に勤める友人の話によると、瞬電でPCが落ちて2時間分の実験データが吹っ飛んでしまったとのこと。

流石に自宅鯖3台もあると停電・雷対策で使っているUPSの容量を増やさねば…


APC Smart-UPS 750 (750VA) SUA750JBAPC Smart-UPS 750 (750VA) SUA750JB

エーピーシー・ジャパン 2005-05-28
売り上げランキング : 26814

Amazonで詳しく見る

第8回SE勉強会!

パーマリンク 2008/06/08 23:47:09 著者: kumaold メール
カテゴリ: 仕事, 勉強会など

さて、本日も恒例?の第8回SE勉強会でした。

今回は、あつさんからの出題でいつもとは一風変わった宿題でした。
Amazon Webサービスを使ってPHP/JavaScpiptで何か作るというものです。

まあ自由課題なんで何を作ってもいいわけなんですが、そもそもAWS自体扱ったことがなかったので最初はサンプルコードの理解だけで苦労しました。


しかし普通~にフォームからデータ渡して表示だけでは面白くなかったので、また今回も妙なことをやらかしましたw

説明も面倒なので実際に使ってみましょう。

携帯・PCなどからこちらに、件名(Subject:)を検索ワードで送ると、検索結果が数秒後にメールで返信されてきます。
検索対象は本(書籍)のみ。売り上げ上位最大10件表示。

amazon@kashimo.com[@は半角に]

※文字化け問題は解消されたので日本語混在でも使えるようになりました。


仕事と正反対なソフト群ですが、自宅鯖環境はこんな感じです。
このプロセスを実行させるためには、メールサーバソフトとの連携が不可欠です。

XMailはWindows上で動作するものの中ではかなり拡張性が高く、例えばメール受信時にプログラムを実行させることができます。

それを応用し、今回のシステムを作成しました。

OSWindows Server 2003 R2 SP2
WebサーバInternet Information Service(IIS) 6.0
メールサーバXMail 1.25
データベースMySQL 5.0.51a

 

MailRoot\cmdaliases\kashimo.com\amazon.tab を保存

"external" …受信時にプログラム実行
"0"     …優先度標準
"30"     …タイムアウト30秒
"php"    …phpを実行
"D:\WWW\test\amazon\amazon.php" "$(FROM)" "$(FILE)"
…実行するphpファイルパスと、メールのFROM:、メールのパスを引数にする

注:本当はタブ区切りの全て横1行で表記し、最後は改行します。


phpファイル(コマンドライン実行なのでインタフェイスなし)

<?php
//最後のメール送信部分はスパム対策でFROM:等は伏せておきます。

/******************************/
/*  Amazonメール検索システム  */
/*                            */
/* amazon.php (FROM) (FILE)   */
/******************************/

$mailto  = $argv[1];    //送信元アドレスを取得
$mailtmp = $argv[2];    //メール一時ファイルのパスを取得
//メール一時ファイルのパス取得バグ修正
$mailtmp = substr($mailtmp, 4, strlen($mailtmp) - 4);

//メール一時ファイルを配列に格納
$maildata = file($mailtmp);
//ファイルオープンに失敗したとき
if (!$maildata) {
    $message .= "ファイルオープン失敗\n";
}
//ファイルオープンに成功したとき
else {
    //メールを1行ずつ読む
    for($i=0; $i < count($maildata); $i++) {
        //メールヘッダのタイトル(Subject:)に合致したらそれ以降を切り出し、UTF-8に変換
        if(ereg("Subject", $maildata[$i])) {
            $search_word = substr($maildata[$i], 8, strlen($maildata[$i]) - 8);
            $search_word = mb_convert_encoding(mb_decode_mimeheader($search_word), "UTF-8", "Shift_JIS");
            break;
        }
    }
    //以下、Amazon Web Serviceによる検索処理。
    //xmlで取得し、xml.phpで配列に格納する
    
    // 自分のアクセスキーID
    $AWSACCESSKEYID = "0X64123456789ABCDEF"; 
     
    // 自分のアソシエイトID
    $ASSOCIATETAG = "******-22";
     
    // APIのURL
    $API_BASE_URL   = "http://webservices.amazon.co.jp/onca/xml";
     
    //------- パラメータの値入力
     
    $SERVICE        = "AWSECommerceService";
    $OPERATION      = "ItemSearch";
    $API_VERSION    = "2004-10-04";
    $RESPONSEGROUP  = Medium;
    $KEYWORDS       = urlencode($search_word);
    $SEARCHINDEX    = "Books";    //"Blended";
    $ITEMPAGE       = "1";
    
    $SORTINDEX      = "salesrank";
    $CONTENTTYPE    = "text/xml";
     
    //------- リクエストURLの生成と出力
     
    // リクエストURL生成
    $api_url = sprintf("%s?Service=%s&AWSAccessKeyId=%s&AssociateTag=%s&Operation=%s&Version=%s&ResponseGroup=%s&Keywords=%s&SearchIndex=%s&ItemPage=%s&Sort=%s&ContentType=%s" ,
        $API_BASE_URL,
        $SERVICE,
        $AWSACCESSKEYID,
        $ASSOCIATETAG,
        $OPERATION,
        $API_VERSION,
        $RESPONSEGROUP,
        $KEYWORDS,
        $SEARCHINDEX,
        $ITEMPAGE,
        $SORTINDEX,
        $CONTENTTYPE
    );
    
    // 検索ワードが存在する場合に、商品検索
    if(isset($search_word)) {
        
        // XMLデータを取得
        $xml_data = file_get_contents($api_url);
        
        // XML パースライブラリーを読み込む
        include('xml.php');
        
        // XMLを連想配列に格納する
        $array_data = XML_unserialize($xml_data);
        
        // 検索結果が1つの場合は、階層を変化させる
        if ($array_data[ItemSearchResponse][Items][Item][0]) {
            $item_data = $array_data[ItemSearchResponse][Items][Item];
        }
        else {
            $item_data[0] = $array_data[ItemSearchResponse][Items][Item];
        }
        
        // 検索結果数の取得
        $total_results = $array_data[ItemSearchResponse][Items][TotalResults];
        
        // 検索ワードのメール用デコード処理
        $decode_keywords = mb_convert_encoding($search_word, "Shift_JIS", "UTF-8");
        
        $message .= $decode_keywords . "の検索結果\n";
        
        //検索結果が1件以上あれば
        if ($total_results != 0) {
            //検索結果数を表示
            $message .= $total_results . "件ありました。\n\n";
            
            // item の数だけループして出力
            foreach ($item_data as $item){
                //各項目を、メール用にSJISにデコードする。
                $message .= mb_convert_encoding($item[ItemAttributes][Title], "Shift_JIS", "UTF-8") . "\n";
                $message .= mb_convert_encoding($item[ItemAttributes][Manufacturer], "Shift_JIS", "UTF-8") . "\n";
                $message .= mb_convert_encoding($item[ItemAttributes][ListPrice][FormattedPrice], "Shift_JIS", "UTF-8") . "\n";
                $message .= mb_convert_encoding($item[DetailPageURL], "Shift_JIS", "UTF-8") . "\n";
                $message .= "====================\n";
            }
        }
        else {
            $message .= "該当商品が見つかりません。";
        }
    }
}

//メールアドレスの形式チェック
if(preg_match("/[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\.\-_]+/", $mailto)) {
    $subject = 'Amazon Mail Search';
    $headers = 'From: *****@*******.***' . "\r\n" .
                'Reply-To: *****@*******.***' . "\r\n" .
                'X-Mailer: PHP/' . phpversion();
    
    $send = mail($mailto, $subject, $message, $headers);
    if ($send) {
        echo "送信成功!\n";
    }
    else {
        echo "送信失敗!\n";
    }
}
else {
    echo "形式不正!\n";
}

?> 

※このサーバはエンコードがShift_JIS基準なのでそれに合わせた。

xmlの配列格納ではPHP XML Library, version 1.2bを使いました。

感想など
 実用性に関しては?ということで…
 今まであまり作ったことない方式でしたが、色々組み合わせて文字化けに苦労しながらも一式作れてよかったです。何かメール送受信を組み合わせたシステムなどに応用できたらいいかなと思います。

Windows Vista/XP で作る 最強の自宅サーバー (CD付)Windows Vista/XP で作る 最強の自宅サーバー (CD付)
タブロイド

ソーテック社 2007-12-15
売り上げランキング : 115577
おすすめ平均

Amazonで詳しく見る
by G-Tools
type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

サーバに嫌な悪寒が・・・

パーマリンク 2008/06/05 12:00:44 著者: kumaold メール
カテゴリ: 仕事, サーバ関係

今週末の勉強会の宿題に取りかかろうとサーバにSSHで繋いでみたら・・・
何か見慣れないエラーが。

-bash: /etc/profile: Input/output error
-bash: /home/user/.bash_profile: Input/output error

なんかログインまわりのファイル読み込みでエラー発生の模様。

とりあえずルートに切りかえっと。

-bash-3.1$ su -
-bash: /bin/su: Input/output error

またしても謎のエラー

viでエラー当該ファイルを開いてみますか

-bash-3.1$ vi /home/user/.bash_profile
-bash: /bin/vi: Input/output error

そもそもvi自体が立ち上がらねぇーーー!!
というか、システム系コマンドほぼ全て、rebootすらできない。

「Input/output error」をググってみると、HDDまわりの嫌~な感じがしてきた。
最悪の事態も考えるべきかな・・・

続きを読む »

type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

<< 1 ... 88 89 90 91 92 93 94 95 96 97 98 ... 103 >>

一六社で働くITエンジニアのブログ。

普段はWeb系システム開発と地元のPCサポートをやってます。いつの間にやら会社に8年目。
技術ネタ中心に日々の仕事と生活と趣味やらを気が向いたら書いてます。

2017年3月
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

検索

XMLフィード

16ブログ     powered by b2evolution free blog software