//<-! ■携帯2PC.UWS-> //■■■各自指定■■■ public PGF$="d:\pc2k\" //プログラムフォルダ。POPOUT、CrenaHtml2jpg、smail、H2Tconv public IM$="D:\ImageMagick\" //ImageMagickインストールしたフォルダ public 作業F$="d:\pc2k\cg\" //汎用作業用フォルダ public POP鯖$="pophoge.hoge.or.jp" //メアドじゃないよサーバーね。 public POP鯖パス$="password" // public SMTP鯖$="smtphoge.hoge.or.jp" //メアドじゃないよサーバーね。 public PCのメアド$="mypc@hoge.hoge.hoge.jp" // public 携帯のメアド$="keitai@hage.jp" // public メール文字数=8000 //うちの携帯は全角5000。半角10000。半角指定で。メッセージとか入るし余裕多め。 public メール文字数重複字数=200 //URLとか途切れるとウザイから重複させる。 public メール数=3 //WEBテキスト、デフォの最大メール数。 public 画像数デフォ=3 //WEB画像、大抵上の3枚あれば済むので。 //■■■変数定義■■■ //public //public 待機短縮時=0 //■■■■■メインルーチン■■■■■ while true //<無限ループ> //まずはメール来てるかチェック print "★メールチェックなう★" 全メール$ = メール受信() //print "【全メール】"+ 全メール$ + "【/全メール】" //チェック //最初の1通を切り出し。 // "m"は、POPOUTで指定した複数メールの区切り記号。1文字にしとかないとtokenが使えない。 メール1通$ = token("m",全メール$,true)  //●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● while メール1通$<>"" 待機短縮時=gettime()+60*15 //メールが入っていたらその後15分間メールチェックを高速に print "【メール1通$】"+メール1通$+"【/メール1通$】" //チェック 宛先$=trim(betweenstr(メール1通$,"<#cr>From: ","<#cr>")) //<#cr>は改行 件名$=trim(betweenstr(メール1通$,"<#cr>subject: ","<#cr>")) 本文$=trim(chgmoj(メール1通$,"x-a"+betweenstr(メール1通$,"x-a","& lt;#cr><#cr>"),""))+"<#cr>" //テスト print "【宛先】"+宛先$+"【/宛先】" //チェック print "【件名】"+件名$+"【/件名】" //チェック print "【本文】"+本文$+"【/本文】" //チェック //■■何の処理をさせるか判定■■ 処理$="スルー" //デフォ値 //件名$の頭が「てすと」ならば@web画面取得へ if COPY(件名$,1,3)="てすと" then 処理$="てすと返信" //件名$の頭が「え」ならばAweb画面取得へ if COPY(件名$,1,1)="え" then 処理$="web画面返信" //件名$の頭が「て」ならばBwebテキスト if COPY(件名$,1,1)="て" then 処理$="webテキスト" print "【 件 名 】"+ 件名$ print "【処理内容】"+ 処理$ //■■<処理@> てすと返信処理■■ ifb 処理$="てすと返信" then //メール送信(件名$,送付本文$,添付$) メール送信("re:てすと","テスト返信。届きましたよ〜","") endif //■■</処理@> てすと返信処理終了■■ //■■<処理A> web画面返信処理■■ ifb 処理$="web画面返信" then print "★★処理A開始★★" //本文$からURL取得。 URL$="http://"+trim(betweenstr(本文$,"<#cr>http://","<#cr>")) print "【URL$】"+URL$ ifb URL$<>"http://" then //URLエンコの指定はあるか エンコ指定=pos("<#cr>えんゆ<#cr>",本文$) //戻り値は文字位置(番目)。なかったら0 if エンコ指定>=1 then URL$=URLエンコ$(URL$) エンコ指定=pos("<#cr>えんい<#cr>",本文$) //戻り値は文字位置(番目)。なかったら0 if エンコ指定>=1 then URL$=URLエンコE$(URL$) print "【URL$エンコ後】"+URL$ //画像トリミング設定 //とりむ[キャプ幅].[キャプ出力幅].[左切り捨て].[上切り捨て] //(「,」じゃなくて「.」なのに注意。単に携帯で「.」の方が押しやすいから) とりむ$=betweenstr(本文$,"<#cr>とりむ","<#cr>") //print "とりむ$="+とりむ$ WEB画像取得(URL$,とりむ$) //CrenaHtml2jpgでweb画面キャプ 最大添付ファイル数=画像分割(とりむ$) //PhotoShifterで画像の加工。ついでにファイル数返す for aaa=0 to 2 //最大添付ファイル数=0はエラーだ。待機時間付きでリトライ処理を3回ほど ifb 最大添付ファイル数=0 then sleep(10) //ちょっと待機 WEB画像取得(URL$,とりむ$) //CrenaHtml2jpgでweb画面キャプ sleep(10) //ちょっと待機 最大添付ファイル数=画像分割(とりむ$) //PhotoShifterで画像の加工 sleep(10) //ちょっと待機 endif next //■添付ファイル名整理 //メール本文に「まい」指定で「添付ファイル数」枚数変更。 //指定無しなら「画像数デフォ」 //「添付ファイル数」が「画像数デフォ」以上なら「添付ファイル数」 添付ファイル数=画像数デフォ まい=val(betweenstr(本文$,"<#cr>まい","<#cr>")) print "■まい■"+まい if 最大添付ファイル数<まい then 添付ファイル数=最大添付ファイル数 if 0<まい and 最大添付ファイル数>まい then 添付ファイル数=まい if 添付ファイル数>最大添付ファイル数 then 添付ファイル数=最大添付ファイル数 print "■添付ファイル数決定■"+添付ファイル数 添付ファイル$="" //添付ファイル数=1だと"a.gif" if 添付ファイル数=1 then 添付ファイル$ = 作業F$+"a.gif" //添付ファイル数=nだと「a-0.gif,a-1.gif,a-2.gif,……a-n-1.gif,」 ifb 添付ファイル数>1 then 添付ファイル$ = 作業F$+"a-0.gif" for i=1 to 添付ファイル数-1 添付ファイル$ = + 添付ファイル$ +","+ 作業F$+"a-"+i+".gif" next endif print 添付ファイル$ endif ifb URL$="http://" then URL$="★URLがちゃんと書かれているか見直しましょう★<#cr>" //エラーメッセージ 添付ファイル$="" 添付ファイル数=0 endif //smailで携帯へメール送信。メール送信(件名$,送付本文$,添付$) 件$="web画像" if 添付ファイル数=0 then 件$="web画像エラー" メール送信(件$,URL$,添付ファイル$) endif //■■</処理A> web画面返信処理終了■■ //■■<処理B> webテキスト処理■■ ifb 処理$="webテキスト" then //メール文字数=4000、メール数=1 //メールは4000文字以内で2通まで。2通で収まらない時はメッセージ「2通で収まりませんでした」 //2通以上は、メール本文に「まい5」と指定。 //全文をテキストファイルにて添付する時は「てんぷ」と指定。 print "★★処理B開始★★" //本文$からURL取得。 URL$="http://"+trim(betweenstr(本文$,"<#cr>http://","<#cr>")) print "【URL$】"+URL$ //URLエンコの指定はあるか エンコ指定=pos("<#cr>えんゆ<#cr>",本文$) //戻り値は文字位置(番目)。なかったら0 if エンコ指定>=1 then URL$=URLエンコ$(URL$) エンコ指定=pos("<#cr>えんい<#cr>",本文$) //戻り値は文字位置(番目)。なかったら0 if エンコ指定>=1 then URL$=URLエンコE$(URL$) print "【URL$エンコ後】"+URL$ //■webテキスト取得■ テキスト$="エラー発生" if URL$<>"http://" then テキスト$ = webテキスト$(URL$) //print テキスト$ //メール何通か テキスト文字数 = LENGTHB(テキスト$) 必要メール数=int((テキスト文字数+メール文字数重複字数)/(メール文字数-メール文字数重複字数))+1 print 必要メール数 まい=val(betweenstr(本文$,"<#cr>まい","<#cr>")) print "【テキスト文字数】"+テキスト文字数 print "【必要メール数】"+必要メール数 print "【まい指定】"+まい+"通" if 必要メール数<=メール数 then 実メール数=必要メール数 if 必要メール数> メール数 then 実メール数=メール数 if まい>0 and まい>必要メール数 then 実メール数=必要メール数 if まい>0 and まい<必要メール数 then 実メール数=まい print "【実メール数(最終)】"+実メール数+"通" //メッセージ メッセージ$="" if 実メール数<必要メール数 then メッセージ$="★"+実メール数+"通で収まらず★<#cr>" メッセージ$=メッセージ$+"★"+URL$+ "★<#cr>" //軽くエラー処理 ifb URL$= "http://" then メッセージ$="★URLがちゃんと書かれているか見直しましょう★<#cr>" 実メール数=1 endif //添付ファイル 添付ファイル$="" 添付指定=pos("<#cr>てんぷ<#cr>",本文$) //戻り値は文字位置(番目)。なかったら0 print "■■■■■■■■■■■■■■■■■■■■■■■■■" for i=0 to 実メール数-1 件$="("+ (i+1) + "/" + 実メール数 + ")webテキスト" //2通目以降、URLとか途切れると面倒なので、何文字か重複させる。 開始文字位置=1+i*(メール文字数-メール文字数重複字数) print "●●●"+ (i+1) +"通目:開始文字位置="+開始文字位置 //最初の文字、最後の文字が2バイト文字の途中ならば1文字ずらす //「0ならば"1バイト文字"」「1ならば"2バイト文字の最初」「B2ならば"2バイト文字の後"」 最初文字判定=bytetype(テキスト$, 開始文字位置) 最後文字位置=開始文字位置+メール文字数-1 最初文字判定=bytetype(テキスト$, 最後文字位置) if 開始文字位置>1 and 最初文字判定=2 then 開始文字位置=開始文字位置-1 if 最後文字位置<テキスト文字数 and 最初文字判定=1 then 最後文字位置=最後文字位置+1 送本文$=メッセージ$+ COPYB(テキスト$,開始文字位置,メール文字数) 添付ファイル$="" if i=0 and 添付指定>0 then 添付ファイル$=作業F$+"h2t.txt" print "【ループ内:件 】"+件$ //print "【ループ内:本文】"+送本文$ print "【ループ内:添付】"+添付ファイル$ print "★★★★★★★★★" //メール送信(件名$,送付本文$,添付$) メール送信(件$,送本文$,添付ファイル$) next endif //■■</処理B> webテキスト処理終了■■ //■■処理完了後■■ メール1通$ = token("m",全メール$,true) wend //●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● //メール鯖に負担掛けるから、メールの確認は3分おき //一度メールを発見したら、15分間は、メールの確認は45秒おき //メールが入っていたら「待機短縮時=gettime()+60*15」 待機時間=60 現在時= gettime() if 待機短縮時>現在時 then 待機時間=15 print "★待機なう:後" + (待機時間*3) + "秒★" sleep(待機時間) print "★待機なう:後" + (待機時間*2) + "秒★" sleep(待機時間) print "★待機なう:後" + (待機時間*1) + "秒★" sleep(待機時間) wend //</無限ループ> //■■■関数■■■ function メール受信() //例)POPOUT.EXE -d -b m -s pophoge.hoge.or.jp -u hoge@hoge.hoge.ne.jp -p passpass | nkf.exe -s //戻り値はヘッダから本文まで丸々メールのテキスト。場合によっては複数メール分。 //CMD$=PGF$+"\POPOUT.EXE -d -b m -s "+POP鯖$+" -u "+PCのメアド$+" -p "+POP鯖パス$+" | "+PGF$+"nkf.exe -s" //-dはサーバーから削除。 CMD$=PGF$+"\POPOUT.EXE -d -b m -s "+POP鯖$+" -u "+PCのメアド$+" -p "+POP鯖パス$+" | "+PGF$+"nkf.exe -s" print "メール受信>"+CMD$ result=doscmd(CMD$) fend procedure WEB画像取得(U$,トリム$) //フォルダ(作業F$)内消去。面倒臭いからバックアップ無しでいいや。 doscmd("del "+作業F$+"*.* /Q") //とりむ【キャプ幅】.【キャプ出力幅】.[左切り捨て].[上切り捨て] 【】内の値使用 キャプ幅= val(token(".",トリム$,true)) キャプ出力幅= val(token(".",トリム$,true)) 切左= val(token(".",トリム$,true)) 切上= val(token(".",トリム$,true)) if キャプ幅<=0 then キャプ幅=840 //-999999=val("") if キャプ出力幅<=0 then キャプ出力幅=840 if 切左<=0 then 切左=0 if 切上<=0 then 切上=0 if キャプ幅>0 and キャプ幅<480 then キャプ幅=480 //最低480 if キャプ幅>1600 then キャプ幅=1600 //最高1600 if キャプ出力幅<=0 then キャプ出力幅=840 //省略はデフォ値840 if キャプ出力幅>0 and キャプ出力幅<480 then キャプ出力幅=480 //最低480 if キャプ出力幅>1600 then キャプ幅=1600 //最高1600 //実キャプ 例)CrenaHtml2jpg.exe -oD:\pc2k\cg\test.gif -fgif -p -r -w1200x0 -s840x0 -t25 -uhttp://www.yahoo.co.jp   CMD$=PGF$+"CrenaHtml2jpg.exe -o"+作業F$+"test.png -fpng -p -r -w"+キャプ幅+"x0 -s"+キャプ出力幅+"x0 -t25 -l10 -u<#DBL>"+U$+"<#DBL>" print "webスクショ:CMD$="+CMD$ doscmd(CMD$) fend function 画像分割(トリム$) //とりむ[キャプ幅].【キャプ出力幅】.【左切り捨て】.【上切り捨て】 【】内の値使用 キャプ幅= val(token(".",トリム$,true)) キャプ出力幅= val(token(".",トリム$,true)) 切左= val(token(".",トリム$,true)) 切上= val(token(".",トリム$,true)) if キャプ幅<=0 then キャプ幅=840 //-999999=val("") if キャプ出力幅<=0 then キャプ出力幅=840 if 切左<=0 then 切左=0 if 切上<=0 then 切上=0 if キャプ幅>0 and キャプ幅<480 then キャプ幅=480 //最低480 if キャプ幅>1600 then キャプ幅=1600 //最高1600 if キャプ出力幅<=0 then キャプ出力幅=840 //省略はデフォ値840 if キャプ出力幅>0 and キャプ出力幅<480 then キャプ出力幅=480 //最低480 if キャプ出力幅>1600 then キャプ幅=1600 //最高1600 //とりむ[キャプ幅].[キャプ出力幅].[左切り捨て].[上切り捨て] //WEB画像取得(URL$,とりむ$) //CrenaHtml2jpgでweb画面キャプ //添付ファイル数=画像分割(とりむ$) //PhotoShifterで画像の加工。ついでに //画像のトリミング(crop) //test.png //まずは画像ファイルの高さ(キャプ縦)取得 //高さだけ取得→IM$ //幅だけ取得→identify -format "%w" test.png //幅高さ取得→identify -format "%w %h" test.png //幅x高さで取得→identify -format "%wx%h" test.png CMD$=IM$+"identify -format <#DBL>%h<#DBL> "+作業F$+"test.png" print "キャプ縦CMD→"+CMD$ キャプ縦=val(doscmd(CMD$)) print "キャプ幅=" + キャプ幅 print "キャプ出力幅=" + キャプ出力幅 print "左切り捨て=" + 切左 print "上切り捨て=" + 切上 print "キャプ縦=" + キャプ縦 if キャプ出力幅<=840 then 横=キャプ出力幅 else 横=840 //キャプ出力幅が最低480だから横=480〜840 if キャプ出力幅-切左<横 then 切左=キャプ出力幅-横 //余計なトリミング防止 if 切左<0 then 切左=0 あ=キャプ出力幅-横-切左 い=横+切左 う=切左 if キャプ縦-切上<0 then 切上=0 え=切上 //実トリミング //D:\ImageMagick\convert -chop 右縦切り取り -chop 左と上 d:\pc2k\cg\test.png d:\pc2k\cg\test3.png //D:\ImageMagick\convert -chop 200x0+1000+0 -chop 200x200 d:\pc2k\cg\test.png d:\pc2k\cg\test3.png //D:\ImageMagick\convert -chop あ x0+ い+0 -chop うx え d:\pc2k\cg\test.png d:\pc2k\cg\test3.png CMD$=IM$+"convert -chop "+あ+"x0+"+い+"+0 -chop "+う+"x"+え+" "+作業F$+"test.png "+作業F$+"test2.png" print "トリムCMD→"+CMD$ doscmd(CMD$) //画像の分割 //D:\ImageMagick\convert -crop 840x480 D:\pc2k\cg\test.gif D:\pc2k\cg\a.png doscmd(IM$+"convert -crop 840x480 "+作業F$+"test2.png "+作業F$+"a.png") //回転 //D:\ImageMagick\mogrify -rotate +90 +repage -compress lzw -format gif D:\pc2k\cg\a*.png doscmd(IM$+"mogrify -rotate +90 +repage -compress lzw -format gif "+作業F$+"a*.png") //PNGファイル消しちゃえ doscmd("del "+作業F$+"*.png /Q") //ついでに最大添付ファイル数を返値に D = GETDIR(作業F$,"*.gif", FALSE, 0) print "【最大添付ファイル数】"+D result=D fend function webテキスト$(U$) //フォルダ(作業F$)内消去。 CTRLWIN(GETID("H2Tconv","TH2TconvForm"),close2) //もし起動していたら閉じる doscmd("del "+作業F$+"*.* /Q")   sendstr (0,U$) //コマンドライン、バグがある。URLに?が入っていると止まる //例)d:\pc2k\H2Tconv.exe "http://mayugeya.sakura.ne.jp/" -o"d:\pc2k\cg\H2T.txt" //CMD$=PGF$+"H2Tconv.exe <#DBL>"+U$+"<#DBL> -o<#DBL>"+作業F$+"h2t.txt<#DBL>" //print "【H2Tconv:U$】" + U$ //print "【H2Tconv】" + CMD$ //doscmd(CMD$) //そんな訳でwindowsで EXEC("<#DBL>"+ PGF$ +"H2Tconv.exe<#DBL>") //起動 ACW(GETID("H2Tconv","TH2TconvForm"),19,524,600,450,0) BTN(LEFT,CLICK,66,539,300) BTN(LEFT,CLICK,220,716,300) BTN(LEFT,CLICK,416,828,300) KBD(VK_TAB,CLICK,40) KBD(VK_SHIFT,DOWN,40) KBD(VK_TAB,CLICK,40) KBD(VK_SHIFT,UP,40) KBD(VK_H,CLICK,40) KBD(VK_2,CLICK,40) KBD(VK_T,CLICK,40) KBD(VK_OEM_PERIOD,CLICK,40) KBD(VK_T,CLICK,40) KBD(VK_X,CLICK,40) KBD(VK_T,CLICK,40) BTN(LEFT,CLICK,556,896,219) sleep(10) CTRLWIN(GETID("H2Tconv","TH2TconvForm"),close2) //閉じる //H2Tconv.exeの作ったテキストファイルから、内容取得 ファイルID=FOPEN(作業F$+"h2t.txt",F_READ) 全文$=FGET(ファイルID,F_ALLTEXT) FCLOSE (ファイルID) result=全文$ fend function URLエンコ$(入力URL$) //UTF8変換→URLエンコード //入力URL$="http://twittell.net/search/search.php?q=コストコ&=つぶやき検索" //↑みたいな感じの半角全角混じりのURLを変換 //面倒臭いから半角カナは未考慮 文字数 = LENGTH(入力URL$) 出力URL$="" for i=1 to 文字数 1文字$ = COPY(入力URL$,i,1 ) 追加文字$=1文字$ //もし1文字$が全角文字ならば 判定 = bytetype(1文字$, 1) //「0ならば"1バイト文字"」「1ならば"2バイト文字の最初」「B2ならば"2バイト文字の後"」 ifb 判定>=1 then // UTF-16 → UTF-8 → URL    追加文字$ = encode(encode(1文字$, code_utf8), code_url) endif 出力URL$=出力URL$+追加文字$ next print "●"+出力URL$ result=出力URL$ fend function URLエンコE$(入力URL$) //EUC-JP変換→URLエンコード //http://www.freespot.com/map/list.php?pi=50&Shop_name=&ds=&District=/map/list.php?ds=13&City=%C3%E6%B1%FB%B6%E8&AC=&BC=&Fee=&AP=&page=1 //http://www.freespot.com/map/list.php?pi=50&Shop_name=&ds=&District=/map/list.php?ds=13&City= //面倒臭いから半角カナは未考慮 //○「中央区」「%C3%E6%B1%FB%B6%E8」連続した文字列で扱わないといけないので注意 //×「中」「央」「区」「%C3%81E%0A」「%B1%81E%0A」「%B6%81E%0A」 文字数 = LENGTH(入力URL$) 出力URL$="" for i=1 to 文字数 1文字$ = COPY(入力URL$,i,1 ) 追加文字$=1文字$ //もし1文字$が全角文字ならば 判定 = bytetype(1文字$, 1) //「0ならば"1バイト文字"」「1ならば"2バイト文字の最初」「B2ならば"2バイト文字の後"」 ifb 判定>=1 then //echo使った手抜きだと後ろに余計な文字が付いてしまうので、余計な文字を付けて頭6文字を取る。 //「中」→「%C3%E6」 半角カナに対応する場合はこの方法じゃ駄目なので注意。まぁするつもりはない。 CMD$="echo " + 1文字$ +"あ|" + PGF$ + "nkf.exe -e" //print CMD$ nkf$=doscmd(CMD$) //print "nkf$:"+nkf$ 追加文字$ = copy(encode(nkf$, code_url),1,6) endif 出力URL$=出力URL$+追加文字$ next print "●"+出力URL$ result=出力URL$ fend procedure メール送信(件名$,送付本文$,添付$) //汎用性を持たせる為に-Fオンリーにする。(本文をテキストファイルに書き出す) //まずはhonbun.txtが残っていたら消去 本文ファイル$ = 作業F$ + "honbun.txt" doscmd("del "+本文ファイル$) //honbun.txt作成 ファイルID=FOPEN(本文ファイル$,F_READ or F_WRITE) FPUT( ファイルID,送付本文$) FCLOSE (ファイルID) //例)smail -hsmtphoge.hogenet.or.jp keitai@hage.jp -f"mypc" -s"web" -T"送付本文" -aD:\pc2k\cg\a-0.gif,D:\pc2k\cg\a-1.gif,D:\pc2k\cg\a-2.gif -i -d CMD$=PGF$+"smail -h"+SMTP鯖$+" "+携帯のメアド$+" -f<#DBL>mypc<"+PCのメアド$+"><#DBL> -s<#DBL>"+件名$+"<#DBL> -F<#DBL>"+本文ファイル$+"<#DBL> -a<#DBL>"+添付$+"<#DBL>" print "【メール送信】"+CMD$ doscmd(CMD$) //メール発射!! fend