Recently in Programming Category

LINE BOT API

user-pic
Vote 0 Votes

LINE 於四月初開始提供 BOT API 試用, 可登入 LINE Business Center 申請
API Reference
需準備一台有 HTTPS 服務的 Web Server, 用來接收 Callback,
不能用自簽的 SSL, 否則 VERIFY 會出現 Could not connect using SSL. 可去申請 Let's Encrypt - Free SSL/TLS Certificates
當有人送訊息到 BOT 帳號, 系統會送 POST message 到指定的 Callback URL (由後台設定),
觀察 Source IP 都來自 203.104.146.0/24, 所以 Server 要 Allow 這一段
訊息是 JSON 格式, 大概像這樣(有經過 formating)

PHP 的回話範例, 將前三行換成自己的即可
Channel ID、Channel Secret、MID 可以在 LINE Developers 後台找到

基本貼圖「饅頭人&詹姆士」 STKPKGID:1, STKVER:100 的 API 參數編號 STKID 依序如下

第1列 STKID 4,13,2,10,17,401,402,5,15,1
第2列 STKID 3,16,403,404,405,406,11,7,21,14
第3列 STKID 8,9,12,6,100,101,102,103,104,105
第4列 STKID 106,107,108,109,110,111,112,113,114,115
第5列 STKID 116,117,118,407,408,409,410,411,412,413
第6列 STKID 414,415,416,417,418,419,420,421,422,423
第7列 STKID 424,425,426,427,428,429,430,119,120,121
第8列 STKID 122,123,124,125,126,127,128,129,130,131
第9列 STKID 132,133,134,135,136,137,138,139

基本貼圖「熊大&兔兔」 STKPKGID:2,STKVER:100 的 API 參數編號 STKID 依序如下

第1列 STKID 140,141,142,143,501,502,503,144,145,146
第2列 STKID 147,504,505,506,507,148,149,150,151,152
第3列 STKID 153,154,155,19,508,509,510,511,512,513
第4列 STKID 18,38,514,515,516,156,158,157,517,518
第5列 STKID 519,520,159,521,522,523,524,525,22,34
第6列 STKID 32,23,526,527,39,33,24,25,27,29
第7列 STKID 30,31,26,160,161,162,163,164,165,166
第8列 STKID 167,168,169,170,171,172,173,174,175,176
第9列 STKID 177,178,179,37,36,46,35,28,20,42
第10列 STKID 41,47,43,45,40,44

基本貼圖「櫻桃可可」 STKPKGID:3,STKVER:100 的 API 參數編號 STKID 依序如下

第1列 STKID 180,181,182,183,184,185,186,187,188,189
第2列 STKID 190,191,192,193,194,195,196,197,198,199
第3列 STKID 200,201,202,203,204,205,206,207,208,209
第4列 STKID 210,211,212,213,214,215,216,217,218,219
第5列 STKID 220,221,222,223,224,225,226,227,228,229
第6列 STKID 230,231,232,233,234,235,236,237,238,239
第7列 STKID 240,241,242,243,244,245,246,247,248,249
第8列 STKID 250,251,252,253,254,255,256,257,258,259

基本貼圖「表情圖片」 STKPKGID:4,STKVER:100 的 API 參數編號 STKID 依序如下

第1列 STKID 263,264,265,266,267,268,601,602,603,604
第2列 STKID 605,606,260,261,262,607,269,270,271,272
第3列 STKID 273,608,274,275,276,277,278,609,610,282
第4列 STKID 283,291,279,280,281,284,285,611,286,612
第5列 STKID 288,289,613,614,615,290,616,617,292,293
第6列 STKID 294,295,296,618,619,287,297,298,299,300
第7列 STKID 301,302,620,303,304,305,306,307,621,622
第8列 STKID 623,624,625,629,627,628,626,630,631,632

.* is greedy match
.*? is non-greedy match

PHP example:
$str="abc123abc456abc";
preg_match("/abc(.*)abc/",$str,$match);
echo $match[1]; // result is 123abc456
preg_match("/abc(.*?)abc/",$str,$match);
echo $match[1]; // result is 123

ISO 8601 Time Formats

user-pic
Vote 0 Votes

ISO 8601 Formats
2016-02-16T14:26:42+08:00
2016-02-16T06:26:42Z
PHP 中可以用 date('c'); 產生 ISO 8601 格式的時間

X-PHP-Originating-Script:

user-pic
Vote 0 Votes

若在 php.ini 加上
mail.add_x_header = On
用 PHP 程式寄出的 Mail 會加上 X-PHP-Originating-Script: 這個 Header, 識別是那一支程式所產生,
若 Mail Function 用很多, 加這個參數來 Debug 還不錯
PHP Version 需 >= 5.3.0

Build LINE API with AutoHotkey

user-pic
Vote 0 Votes

本篇不是講 carpedm20 用 Python 寫的那個非官方 LINE API
那個非官方的 API 似乎被 LINE 封鎖了, 2015-08-26 開始就不能使用
替代方案是用電腦版 LINE + AutoHotkey 自己做
簡單講就是把使用電腦版 LINE 的動作, 寫成一個 AutoHotkey Script , 帶參數進去就成了土法 API

Script 如下, 其中的座標要用 AutoIt3 Window Spy 進行調整成適合自己的環境, 每台電腦狀況不太一樣
CoordMode, Mouse, Screen ; 螢幕絕對座標
MouseClick, left, 944, 754, 2 ; 點兩下 LINE tray icon
CoordMode, Mouse, Relative ; 視窗相對座標
Sleep, 400
MouseClick, left, 70,66 ; 點「好友」圖示
MouseClick, left, 240,112 ; 點到搜尋欄
Send {BS 20}%1% ; 送出 20 個 Backspace (刪除上一個收訊者名稱) 及收訊者名稱
Sleep, 200
MouseClick, left, 100, 190, 2 ; 滑鼠到收訊者名稱點兩下
Sleep, 200
Send %2%{Enter} ; 輸入訊息及 Enter 送出
Sleep, 600 ; 這邊的停頓很重要, 停太少時間會導致訊息還沒送出就關閉視窗
Send ^w ; 關閉聊天視窗
return

存成 SendMessage.ahk
送訊息 SendMessage.ahk {個人或群組名稱} {訊息}
例如: SendMessage.ahk Pank 測試

這個方法的優點是不會被封鎖, 缺點是送訊息的速度沒辦法太快, 最快要 1 秒多
LINE 有改版時需留意 Layout 是否有變, 可能需要微調座標

進階一點可以用 Apache + PHP 弄個 API 遠端呼叫
訊息量多的話還需要弄個 Queue 來管理, 才不會有兩筆 Request 同時進來時,
造成 AutoHotkey Script 同時執行或執行時間有重疊而游標錯亂

PHP 5.2 Security Fix

user-pic
Vote 0 Votes

php52-backports
wget http://museum.php.net/php5/php-5.2.17.tar.bz2
tar jxf php-5.2.17.tar.bz2
cd php-5.2.17

# full trunk patch
wget http://php52-backports.googlecode.com/files/php52-backports-20130717.patch
patch -p1 < php52-backports-20130717.patch

# security branch patch
wget http://php52-backports.googlecode.com/files/php52-backports-security-20130717.patch
patch -p1 < php52-backports-security-20130717.patch

PHP RePOST data

user-pic
Vote 0 Votes

Recieve POST and RePOST data to somewhere. Similar to POST redirection.

$ch = curl_init('http://yourhost.com/post.php');
$postdata = file_get_contents("php://input");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);

PHP mb_send_mail

user-pic
Vote 0 Votes

PHP mb_send_mail
Subject and message are automatically encoded,
to and additional_headers are not automatically encoded.

mb_send_mail 比 mail 好用很多, 主旨及本文會自動依 mbstring.internal_encoding 處理編碼
但是當 to and additional_headers 有包含 multi-byte 時, multi-byte 部份要用 mb_encode_mimeheader 處理過才會正常
e.g.
$to=mb_encode_mimeheader("王大頭")." <foo@test.com>";
$additional_headers="From: ".mb_encode_mimeheader("王小頭")." <bar@test.com>\nContent-Type: text/plain; charset=UTF-8";
mb_send_mail($to,$subject,$message,$additional_headers);

OverAPI

user-pic
Vote 0 Votes

OverAPI
Nice cheat sheets
開發者小抄大全

MSNSwitch control API

user-pic
Vote 0 Votes

MSNSwitch 是 2 Port 的 IP Power, 且支援網路監控條件重啟電源, 非常好用
需更新 Firmware 到最新版
user= 登錄名稱
passwd= 密碼
outlet= 0 表示所有插座; 1 表示插座 #1; 2 表示插座 #2
command= 0 表示 OFF; 1 表示 ON; 2 表示「切換」; 3 表示「重置」; 4 表示 UIS ON; 5 表示 UIS OFF
例子: 將所有插座設置為開啟狀態:
http://hostname/outlet2.cgi?user=admin&passwd=1234&outlet=0&command=1

About this Archive

This page is an archive of recent entries in the Programming category.

Photo is the previous category.

Security is the next category.

Find recent content on the main index or look in the archives to find all content.

Monthly Archives