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

 プロの職人さんでしたら、ここでさらに燃え上がってチャレンジするのでしょうが、サンデープログラマーにもならない自分のようなものは、
 「なんだ、もともとcsvから一方通行にしかならないんだったら、わざわざicsにしなくても、HTMLで表示できればそれで済みじゃん。。」と考えた訳です。
続きを読む >>
| php scripting | 18:17 | comments(0) | trackbacks(0) | pookmark |
なんとなく 動く。。(※メモ書きとして)
 なんとなく 動くようになりました。

ただ、これは叩き台ですね。エラー処理も、XSSもなにも考えていない。。。
きちんと使うためには、もう少し手を入れなければ、たとえそれが個人用のものでも不安です。

機能的な面としては、
まず、今のようにテーブルの中のリンクでは、iphone に直接読み込めない。これはこれで置いておいて、最新のカレンダーが常に特定の場所にあるようにしなければならないらしいです。
さらに、UIDを乱数なんかで作ってしまったからには、二度読み込むと、すべて違うデータと解釈され、予定が二重になってしまう。。。これはどうしましょうか。。

★(5月29日加筆)実はデータがiCalで二重になってしまうのは、UIDのせいではなかった。もう少し調査の必要がありますね。うーん、よくわからない(笑)。。。


セキュリティの面は、全体にXSS対策、それに、データにHTMLのタグをエスケープさせる。

あとは、安定性の問題で、エラー処理をきちんとしていく。

そこまで根気が続くかどうか、、、今度は人間の側の問題かもしれません。。(笑)

続きを読む >>
| php scripting | 11:34 | comments(0) | trackbacks(0) | pookmark |
ひとまず、ここまで。。。(※メモ書きとして)
 特定の環境なのだが、とりあえず、メールを読んで、中身を書き出すことはできるようになった。あとは、icsデータに合わせて、csvデータを加工するだけ。
 これは、phpでは非常に簡単なので、あっと言う間にできる。icsデータのヘッダとして多少付け加えなければならない。

caldata1.phpとして次のデータを、(実際は1行)

<?php

$caldata1 = "BEGIN:VCALENDAR"."¥r¥n"."METHOD:PUBLISH"."¥r¥n"."VERSION:2.0"."¥r¥n"."X-WR-CALNAME:カレンダー"."¥r¥n"."PRODID:-//Apple Inc.//iCal 4.0.4//EN"."¥r¥n"."X-APPLE-CALENDAR-COLOR:#0252D4"."¥r¥n".
"X-WR-TIMEZONE:Japan"."¥r¥n"."CALSCALE:GREGORIAN"."¥r¥n".
"BEGIN:VTIMEZONE"."¥r¥n"."TZID:Japan"."¥r¥n"."BEGIN:DAYLIGHT"."¥r¥n".
"TZOFFSETFROM:+0900"."¥r¥n"."RRULE:FREQ=YEARLY;
UNTIL=19510505T170000Z;BYMONTH=5;BYDAY=1SU".
"¥r¥n"."DTSTART:19500507T020000"."¥r¥n"."TZNAME:GMT+09:00".
"¥r¥n"."TZOFFSETTO:+1000"."¥r¥n"."END:DAYLIGHT"."¥r¥n".
"BEGIN:STANDARD"."¥r¥n"."TZOFFSETFROM:+1000"."¥r¥n".
"DTSTART:19510908T020000"."¥r¥n"."TZNAME:GMT+09:00".
"¥r¥n"."TZOFFSETTO:+0900"."¥r¥n"."END:STANDARD"."¥r¥n".
"END:VTIMEZONE"

?>

caldata2.phpとして

<?php

$caldata2 = "END:VCALENDAR"."¥r¥n"

?>

を作っておく。

calpop.phpは以下のようになった。
続きを読む >>
| php scripting | 20:39 | comments(0) | trackbacks(0) | pookmark |
こんどはicalのほうから考えてみる (※メモ書きとして)
こんどはiCalデータを見てみる。
最小限のデータで作っていきたいので、データを削ってどこまできちんと表示できるかを考える。
最終的には、下のようなイベントのひとまとまりでなんとなりそう。。

BEGIN:VEVENT
UID:3AA
DTEND;VALUE=DATE:20110427
SUMMARY:終日遊びにいかない
DTSTART;VALUE=DATE:20110425
END:VEVENT
*二日間連続のデータ

BEGIN:VEVENT
UID:633
DTEND;TZID=Japan:20110426T160000
SUMMARY:遊びに行かない2
DTSTART;TZID=Japan:20110426T150000
END:VEVENT
*時間指定のデータ

なお、UID:は勝手につけた。何桁でもいいらしい。
| Wii電子黒板実験(Mac) | 23:26 | comments(0) | trackbacks(0) | pookmark |
腹を据えれば話が早い。。(※メモ書きとして)
いろんなことをあれこれ考えずに、今必要な環境にのみ対応させていくぶんには話が早い。
1行づつトライ&エラーでサクサクと、、、メールの仕様がみな同じなら楽なのにね。
でも、サンプルとなるメールデータをうっかり消してしまったので、結局もう一度自分にメールを出すために休日出勤。。まあ、阿呆ではある。

        //本文データと、添付ファイルデータを取り出す。
        //本文はJISからSJIS変換。その後mb_convert_encoding()で日本語に。
        //添付ファイルはBase64デコード。

        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 $honbun[$i];

            EregI('filename="([^"]+)"', $part[2], $file);
            $filename = $file[1];
            //添付ファイル名
            echo $filename;

            $att = Split("filename="."¥".*¥"", $part[2]);
            $attch[$i] = Base64_Decode($att[1]);
            //添付ファイルデータ
            echo $attch[$i];
            }
| php scripting | 21:43 | comments(0) | trackbacks(0) | pookmark |
ちょっと待って。。(※メモ書きとして)
メールが一つずつ取り出せたところで、それぞれのメールデータを処理する。
以下のよう。。

         //空行をみつけてヘッダと本文を分ける
         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);
         print $maildate[$i];
        
         //タイトルを取り出す。変数$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");
        print $mailsub[$i];
        
        //送信元を取り出す。ここでは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];
        print $mailsender[$i];

ところが、ちょっと ちょっと。。待てよ。。
続きを読む >>
| php scripting | 20:05 | comments(0) | trackbacks(0) | pookmark |
スクリプトの枠組み部分(※メモ書きとして)
スクリプトの枠組み部分

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

require_once("config.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);

//一つ一つのメッセージに対する処理ループ
 for($i =1 ; $i<=$no ; $i++)
        {

        print $mssg[$i];
        
        }

?>
続きを読む >>
| php scripting | 17:56 | comments(0) | trackbacks(0) | pookmark |
いったい何がしたいのか(※メモ書きとして)
 いったい、何がしたいのか。
あちこちで調べごとをしている間に、自分でもよくわからなくなってしまうので、
とりあえず、要件だけ書きだしておこう。全てはこの春の異動が原因なのだ。。。

<目的>
職場で使っている(使わされている)グループウエアのスケジュールデータを自分のiPhoneに移したい。(それができないと、スケジュール管理以前の問題か)

<課題1>
件のグループウエア、スケジュールの書き出しはできるが、icalでもvcalでもなく、CSVデータなのである。
<課題2>
自席のPCは、もちろん外部にはつながっていない。ただ、メールはやり取りできる。これが唯一の窓口。また、PCそのものは、USBも認識できないようになっている(らしい)。もちろんiPhoneを繋ぐなんて、もってのほか。。


続きを読む >>
| php scripting | 07:41 | comments(0) | trackbacks(0) | pookmark |
実際に読み出すメールはどうか Mac編(※メモ書きとして)
メールに添付ファイルをつけると、その部分は、メール本文とは違った扱いで、しかし、一本のメールデータの中に入れられる。
 それがマルチパートという考え方。

つまり、シングルパート(テキストメールだけ)の場合、次のような構成になる。

<メールヘッダ>
<メール本文>

マルチパートは、

<メールヘッダ>
<メール本文>
<添付ファイル部分1>(base64でエンコード)
<添付ファイル部分2>(base64でエンコード)
<添付ファイル部分3>(base64でエンコード)
となる。

具体的には、本文と添付ファイル部分を分ける、バウンダリー部分によって区別される。


続きを読む >>
| php scripting | 20:06 | comments(0) | trackbacks(0) | pookmark |
メールサーバーと通信( ※メモ書きとして)
まず、最初に、
メールサーバーの動きを確認しておく。(Postfixらしい。。。)
telnetでpopサーバーに直接接続してみる。
phpからは、fsockopen関数を使ってソケット通信する予定。まあ、同じ動きだと思う。

> telnet ******.**** 110  

※******.****はpopサーバーの名前、110はポート番号

Connected to ******.****
Escape character is '^]'.
+OK Hello there.

と返事が返ってくればオーケイ。ユーザー名とパスワードを送る。

user %%%%
+OK Password required.

pass $$$$$$
+OK Connected to proxy server.

接続できた。




続きを読む >>
| php scripting | 09:20 | comments(0) | trackbacks(0) | pookmark |
<< | 2/7PAGES | >>