CALENDAR
S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930    
<< April 2019 >>
ARCHIVES
CATEGORIES
RECOMMEND
RECOMMEND
RECOMMEND
WiiRemoteプログラミング
WiiRemoteプログラミング (JUGEMレビュー »)
白井 暁彦,小坂 崇之,くるくる研究室,木村 秀敬
RECOMMEND
RECOMMEND
RECOMMEND
MOBILE
qrcode
<< なんとなく 動く。。(※メモ書きとして) | main | SQS備忘録(1)スタートアップ >>
結局はHTMLなのね(メモ書きとして。。)
 うだうだと下手なスクリプトを書き連ねてきましたが、iCalについていろいろ調べて見ると、いろいろな制約があって、そんなに簡単には事が運ばないということが分かってきました。メールを読み込んだ段階で、添付ファイルのデータを全部MySQLか何かに放り込んでしまえば話が早いのでしょうが、それでも、元データの変更に伴い、変更部分だけを、データベース側でどうアップデートするかと言う問題がありますし、そもそも1ヶ月単位でしか書き出せないもとのグループウエアの方は何とかならんのか!というメンタルな部分もあり、とりあえず使えるようになったところでモチベーションは急降下しているわけです。
 結論的にcsvで書き出されたカレンダーデータは、icsに一度は変換できるが、シンクロということを考えると、まあ無理なのでしょう。
 それでどうしたか。。。。

 プロの職人さんでしたら、ここでさらに燃え上がってチャレンジするのでしょうが、サンデープログラマーにもならない自分のようなものは、
 「なんだ、もともとcsvから一方通行にしかならないんだったら、わざわざicsにしなくても、HTMLで表示できればそれで済みじゃん。。」と考えた訳です。
 結局、以下のようにイベントデータをhtmlで出色。テーブルにして多少見栄えを良くしただけ。iphone で見やすくしたら、PCでは恥ずかしい表示になってしまったので、後から変更できるようにcssをかました。。まあ、いいか。。

 よく見直してみると、使っていない変数やら、何やらいっぱいあるが、もうこれ以上手を入れる気も無いので放置しておく。。。

<?php
/*
calpop.php
メールサーバーに接続し、メールを読む。
読んだメールは、配列変数 $mssgに格納される。
サーバーへの接続データはcalpopconfig.phpにて読み込み。
2011.5.29  h2caster.net
*/

echo "<html><HEAD><META HTTP-EQUIV='Content-Type' CONTENT='text/html;charset=sift-jis'><META HTTP-EQUIV='Pragme' CONTENT='no-cache'><TITLE>k2cal.php</TITLE><link rel='stylesheet' type='text/css' href='c2html.css' media='screen' /></HEAD><body>";

require_once("calpopconfig.php");


    //popサーバーに接続
    $fp = fsockopen($host, $port);
    // ログイン
    $resp = fgets($fp, 512);
    // USER
    fputs($fp, "USER $user¥r¥n");
    $resp = fgets($fp, 512);
    // パスワード    
    fputs($fp, "PASS $pass¥r¥n");
    $resp = fgets($fp, 512);
    // ログイン失敗のとき
    if( !eregi("OK", $resp) )
        {
        fclose($fp);
        echo " popサーバーにログインできませんでした。";
        return false;
        }
    //echo "メールサーバーにログインしました。";


    // メールボックスのデータを確認する
    fputs($fp, "STAT¥r¥n");
    $resp = fgets($fp, 512);
    list($stat, $no, $size) = explode(' ', $resp);
    if( 0+$no == 0 )    // メールデータが0件
        {
        fclose($fp);
        echo "メールデータが0件です。";
        return false;
        }
     echo "メールは"."$no"."件です。";


    // 順に受信して、配列に納める ・・配列変数 $mssg[$i]
    for($i=1 ; $i<=$no ; $i++)
    {
        fputs($fp, "RETR $i¥r¥n");
        $resp = fgets($fp);


        $mssg[$i] = "";
        while( !eregi("^¥.¥r?¥n", $resp) )
                {
            $resp = fgets($fp, 512);    
            $mssg[$i] .= $resp;
                }

        //fputs($fp, "DELE $id¥r¥n");
        //$resp = fgets($fp, 512);
    }

    fputs($fp, "QUIT¥r¥n");
    fclose($fp);

echo "<table border=1 align=center width=100%>";
echo "<tr>";
echo "<th>メール番号</th>";
//echo "<th>日付</th>";
//echo "<th>タイトル</th>";
//echo "<th>送信元</th>";
//echo "<th>本文</th>";
//echo "<th>添付ファイル名</th>";
echo "<th>icsデータ</th>";
echo "</tr>";

//iCalヘッダの読み込み・変数の宣言 その他
$Gcaldata = "";
$caldata3 = "";
$caldata4 = "";
require_once("caldata3.php");
require_once("caldata4.php");
$week_array = array('日', '月', '火', '水', '木', '金', '土');

//一つ一つのメッセージに対する処理ループ
 for($i =1 ; $i<=$no ; $i++)
        {
        echo "<tr>";
        
        echo "<th>".$i,"</th>";
        
        //空行をみつけてヘッダと本文を分ける
         list( $head[$i], $body[$i]) = split("¥r¥n¥r¥n", $mssg[$i], 2);
         $head[$i] = ereg_replace("¥r¥n[¥t ]+", " ", $head[$i]);

         //日付の抽出。変数$dateは配列。22文字分だけにする。
         //なお、$date[1]だけ使っている。
         eregI("Date:[ ¥t]*([^¥r¥n]+)", $head[$i], $date);
         $maildate[$i] = Substr($date[1], 0, 22);
         //echo "<th>".$maildate[$i]."</th>";
        
         //タイトルを取り出す。変数$mailsub[$i]
         eregI("¥nSubject:[ ¥t]*([^¥r¥n]+)", $head[$i], $subj);
         $mailsub[$i] = $subj[1];
         //とりあえず、Base64デコード。さらにmb_convert_encoding()で日本語に。
        eregI("(.*)=¥?iso-2022-jp¥?B¥?([^¥?]+)¥?=(.*)", $mailsub[$i], $sub);
        $mailsub[$i] = $sub[1].Base64_Decode($sub[2]).$sub[3];
        $mailsub[$i] = mb_convert_encoding($mailsub[$i],"SJIS","JIS");
        //echo "<th>".$mailsub[$i]."</th>";
        
        //送信元を取り出す。ここではFrom:を使う。変数$mailsender[$i]
        eregI("From:[ ¥t]*([^¥r¥n]+)", $head[$i], $sender);
        //メールアドレスであるか確認
        eregI("[-!#$%&¥'*+¥¥./0-9A-Z^_`a-z{|}~]+@[-!#$%&¥'*+¥¥/0-9=?A-Z^_`a-z{|}~]+¥.[-!#$%&¥'*+¥¥./0-9=?A-Z^_`a-z{|}~]+", $sender[1], $sender2);
        $mailsender[$i] = $sender2[0];
        //echo "<th>".$mailsender[$i]."</th>";

        //本文データと、添付ファイルデータを取り出す。
        //本文はJISからSJIS変換。添付ファイルはBase64デコード、その後mb_convert_encoding()で日本語に。
        if (EregI("¥nContent-type:.*multipart/", $head[$i]))
            {
            EregI('boundary="([^"]+)"', $head[$i], $bound);
            $part = Split("¥r¥n--".$bound[1], $body[$i]);
            $hon = Split("Content-Transfer-Encoding: 7bit", $part[1]);
            $honbun[$i] = mb_convert_encoding($hon[1],"SJIS","JIS");
            
            //本文データ
            //echo "<th>".$honbun[$i]."</th>";
            EregI('filename="([^"]+)"', $part[2], $file);
            $filename = $file[1];
            
            //添付ファイル名
            //echo "<th>".$filename."</th>";
            $att = Split("filename="."¥".*¥"", $part[2]);
            $attch[$i] = Base64_Decode($att[1]);
            
            
            echo "<th>";
            //ここから添付ファイルデータを解析 $attch[$i]の中身を見る。
            //まず1行ずつ切り分け、配列に入れる。$data[0]は項目行。
            $data = explode  ( "¥r¥n" , $attch[$i] );
            
            $caldata = "";
            
            //個々の日付データ、切り分けた1行ごとの処理 1行目からm行目まで。
            $caldata = "<table border=1  align=center  width=100%>";
            for( $m=1; $m<=count($data); $m++)
                    {
                    $item = explode  ( "," , $data[$m] );
                    
                    //$item[0]開始日  $item[1]開始時間  $item[2]終了日  $item[3]終了時間
                    //$item[4]項目内容  $item[5]場所  $item[6]分類
                    $uid = rand();
                    
                    
                    $date = str_replace ("/", ",", $item[0]);
                    $year = substr($date,0,4);
                    $month = substr($date,5,2);
                    $day = substr($date, 8,5);
                    $weekday = $week_array[date('w', mktime(0, 0, 0, $month,$day,$year))] ;
                    
                    
                    $caldata = $caldata . "<tr>";
                    $caldata = $caldata . "<td>". $month."月". $day."日"."</td><td>".$weekday."</td><td>". $item[1].$item[3].$item[4].$item[5]."</td>";
                    $caldata = $caldata . "</tr>";
                    
                    }
            //個々の日付データの処理ここまで
            $caldata = $caldata . "</table>";
            
            //実際にカレンダーデータを持ったファイルを作り出し、それにリンクを張る。
            
            $caldata = $caldata3. $caldata . $caldata4;
            $fname = rtrim( $filename, ".csv").".html";
            touch($fname);
            $caldata = mb_convert_encoding($caldata , 'utf8', 'sjis-win');
            file_put_contents( $fname , $caldata);
            $link = "<a href=". $fname . ">" . $fname . "</a>";
            echo $link;
            
            }
            echo "</th>";
            echo "</tr>";
            
        //添付ファイルがない場合の処理をここに記述
        //ここまで
        
        
        }
//一つ一つのメッセージに対する処理ループ ここまで
echo "</table>";

echo "</body></html>";

?>


caldata3.php
<?php

$caldata3 = "<html><HEAD><META HTTP-EQUIV='Content-Type' CONTENT='text/html;charset=utf8'><META HTTP-EQUIV='Pragme' CONTENT='no-cache'><TITLE>k2cal.php</TITLE><link rel='stylesheet' type='text/css' href='c2html.css' media='screen' /></HEAD><body>";

?>

caldata4.php
<?php

$caldata4 = "</body></html>";

?>

cssの中身。。
body {
margin: 0;
padding: 0;
line-height:2.0;
color:#000;
font-family:Arial, sans-serif;
font-size:1.4em;
}

table {
margin: 0;
padding: 0;
line-height:2.0;
color:#000;
font-family:Arial, sans-serif;
font-size:1.4em;
}
| php scripting | 18:17 | comments(0) | trackbacks(0) | pookmark |
コメント
コメントする









この記事のトラックバックURL
http://blog.h2caster.net/trackback/1068713
トラックバック