2018年2月13日 星期二

Gmail API 解讀秘技

最近做多了社交數據分析,開始想試試用銷售方面的數據,正好電子郵箱有相關的材料。但是,要怎樣才能把郵件內容轉換成數據庫的東西?既然是 Gmail 郵箱,只要用 Gmail API 就能讀取。

一年多前,我試過,但失敗了。今天再接再厲,遇到同樣的問題。明明拿到了郵件內容,但是卻只能把部份資料成功解碼...。找了很久也解決不了,正想放棄的時候,發現 Google 的 Base64 編碼有點蠱惑,把加號及斜號都換成其他符號,難怪我一直無法完整解讀。以下是最重要的代碼部份:
//  Get full message body
$fullMessage = $_service->users_messages->get($userID, $messageID);
$payload = $fullMessage->getPayload();
$partArray = $payload->getParts();
foreach ($partArray as $part)  {

    //  Only need email body, don't need attachment
    $mimeType = $part->getMimeType();
    if ($mimeType != "text/html")  {continue;}

    $body = $part->getBody();
    if ($body != null)  {

        $data = $body->getData();
        if ($data != null)  {

            //  !!! This is key point, otherwise message won't decode correctly
            $sanitizedData = strtr($data, "-_", "+/");

            $html = base64_decode($sanitizedData);
            $length = strlen($html);
            if ($length > 0)  {

                file_put_contents($filename, $html);
                printf("Saved");
            }
        }
    }
}

2018年2月1日 星期四

社交數據

最近發生的印花婆婆事件觸怒了很多人的神經,大量網民到專頁作出評擊,引發公關災難。最利害的貼文留言數達高 97 萬。究竟當中的內容帶來甚麼啟示呢?我用 PHP 編寫了一個小程式去擷取相關數據,看看有甚麼發現。


上圖是以專頁每天的留言數目繪製而成的圖表,看到過去兩星期留言數字的變化。清楚看到事件在 18 號發酵,之後逐漸回落,到 26 號審判日再次攀升,之後再次回落。事件在兩個星期後落幕。


程式在 1 月 25 號才完成,在 26 號開始擷取專頁的數據。而由於 Facebook 的反應數據不帶日期,只能以擷取時間為標記,所以 26 號之前的可以不理。從數據可以看出「嬲嬲豬」的比重是最多,反應網民一致表達憤怒。走勢跟留言一樣,經過審判日後漸漸回落。


拿最新的幾個貼文的留言數目來繪製圖表,可以得出最多留言的用戶。頭三名的留言數字大幅拋離一眾用戶。而單單一個貼文竟然可以寫下 3736 留言,看來有點奇怪。貼文刊登了七天後,用戶已經留下超過 3000 留言;若以一天工作八小時去計算,每小時要貼 64 個貼文。當中其實有大量重複的內容,她真的很「嬲嬲豬」。


再看看他們留言的時間,除了第三名比較正常有休息時間外,頭兩名機乎在每個小時都有留過言,十分勤力。

2018年1月3日 星期三

在 Mac 安裝 PHP 7.2


最近想學習使用 Laravel+PHP 7.2,但家中的電腦不是沒有空間,就是速度慢。最後找來 MacBook Air 嘗試直接安裝。原本 Mac 跟機攜帶 PHP 5,要裝 PHP 7 必須先行把 PHP 5 移除。

2017年12月28日 星期四

WeChat 瀏覽器檢測

最近想把一個 Facebook 項目同時放到 WeChat 內執行,但流程上會作出改變,需要一個方法去分辨是否在 WeChat 瀏覽器之內。原來可以從 User Agent 入手:
//----------------------------------------------------------------------------------------
//  Reading parameters
$userAgent = $_SERVER["HTTP_USER_AGENT"];
$userAgent = strtolower($userAgent);

if (strpos($userAgent, "micromessenger") !== false)  {

   $html = file_get_contents("./views/_inside.html");
   echo($html);
   exit(0);
}

$html = file_get_contents("./views/_outside.html");
echo($html);

2017年12月23日 星期六

聖誕小禮物


上年的聖誕節推出了絲帶版可口可樂,我買了回來作為小禮物送給 IT Team 同事,借此多謝他們過去一年的付出。雖然只是一瓶汽水,不是貴重的禮物,卻是我小小的心意。

今年我想感謝的人多了,而且不限於 IT Team 的同事。知道有些同事注重健康不喝汽水,改為冰糖雪梨,可以在這乾燥的時候帶來小小的滋潤;有同事想品嘗日本版芝士杯麵,給我找到了;至於咖啡,那位同事最近心事重重,希望咖啡可以為她提提神。

本來我想為每位同事都獨立繪畫一張心意卡,但畫了一位後畫不出第二位,最後偷懶只畫一張共通的圖案。希望下年有機會吧,不過下年應該會有再多一點同事希望感謝。大家收到小禮物後都很開心;有同事甚至珍而重之把它過膠紀念。喜悅是可以感染,希望大家有一個快樂的聖誕節。

2017年12月10日 星期日

MIST


最近買了一本「寫給未來社會的新帳本・區塊鏈」書,知道了有一個叫 Ethereum 的以太坊平台,能讓開發者提供以太坊應用程式去賺取以太幣。當使用以太坊應用程式時就需要用到以太幣。Ether 以太幣就像 Bitcoin 比特幣一樣,同樣應用了 Blockchain 技術的加密貨幣;價格也有升有跌。而使用以太坊應用程式時,需要使用一個名為 MIST 的瀏覽器去執行。不過,我認為目前使用的門檻較高。用戶除了要對以太坊有一定概念外,還需要安裝 MIST,建立以太幣錢包,購買以太幣。如果像我般不懂得設定 MIST 瀏覽器,還會把整條以太坊的區塊鏈下載回來,動輒花去數小時至數天時間,視乎電腦的效能而定。不過,我認為以太坊是一個很有潛力的平台。

2017年12月3日 星期日

模擬 iPhone 8 Plus 視差濾鏡效果


同事生日,另一位同事拿出 iPhone 8 Plus 展示了視差濾鏡效果,感覺不錯。很想買一台。但我喜歡 iPhone 8 多過 Plus,就算買也只會是細機,而細機是沒有雙鏡頭,拍不出帶視差數據的照片。我在想,Apple 的濾鏡也只是軟件,能不能在 iPhone 7 Plus 上編寫而達到相同效果呢?結果是可行。

2017年11月29日 星期三

IN117 Team Song


詞:Pacess, Johnson, Mandy

想起那天一同前行 全力一拼衝極限
意識到我唯有去愛 才令世上添新機
交出我心方能完全 朝著我路總未倦
理想方向全力去拼 終可會得到

願為理想 全力去幹不怨命
若遇挫時 仍然毫無懼與驚
若沒跌到 其實也已肯定
若犯錯時 容我 Break Through 再起
能時常懷自信 令你令我添力量
有勇氣創高峰 跨過千百山嶺
讓昨日無數夢 能一一的得到
我發亮尤如耀晚星

想起那天一同前行 全力一拼衝極限
意識到我唯有去愛 才令世上添新機
交出我心方能完全 朝著我路總未倦
理想方向全力去拼 終可會得到

為著理想 誰亦要去起革命
若遇挫時 仍然毫無懼與驚
為著理想 寒夜裡也不間斷
若犯錯時 容我 Let Go 說清
能時常懷自信 令你令我添力量
有勇氣創高峰 跨過千百山嶺
讓昨日無數夢 能一一的得到
我發亮尤如耀晚星

想起那天一同前行 全力一拼衝極限
意識到我唯有去愛 才令世上添新機
交出我心方能完全 朝著我路總未倦
理想方向全力去拼 終可會得到
<Repeat Twice>

停望障礙 忘記過去 終可會衝線

2017年11月26日 星期日

相信自己,隨心出發


應承了同事在十一月內完成某個功能,這兩天努力趕工,但還是徒勞。進度行慢,很多部份都不似預期,很有壓力、很想放棄。承諾了就要做到,但思想混亂,程式更易出錯。怎麼好?畫了一張畫鼓勵自己:「相信自己,隨心出發」。

2017年11月23日 星期四

支持你


這兩天悶悶不樂,有點情緒,想抓點抒發的渠道,於是用畫作來達成。在午飯時間隨手畫了四個公仔,我最喜歡這張。神態鬆容自然,好像有個少女在背後默默支持自己一樣。公仔的造型是一位我很著緊的同事,同時也是為她而繪,希望能支持到她的心靈。