[PHP] cURL 進入需要 Basic Authentication 的網址取回資料

Standard

今天幫一位朋友去撈某線上資料庫的資料,該線上資料庫有 Basic Authentication 的帳號密碼驗證(就是會跳一個 dialog 要輸入帳號密碼那種),因此在 cURL 連過去撈資料時,必須加送帳密,以及 Cookies 的部份(少送 Cookies 就被認為未登入了)。

簡單記錄一下程式碼:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $target_url);                     // 連接目標網址
    curl_setopt($ch, CURLOPT_COOKIEJAR,  $cookie_file);             // 儲存 Cookies
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);             // 再傳送一開始獲得的 Cookies
    curl_setopt($ch, CURLOPT_HEADER, 0);                            // 不要返回 header 資訊
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                 // 返回字串,不要直接输出
    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password); // Basic Authentication 帳號跟密碼
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_POST, true);                           // 啟用POST
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query( array( "foo" => $foo ) )); // 這邊就塞 POST 的東西囉
    $result = curl_exec($ch); 
    curl_close($ch);

    // 以下就是解析字串了,不是本篇重點,參考就好
    $html = str_get_html($result);
    $tr = $html->find('tr');
    $max = count($html->find('tr'));

    for ( $i = 1 ; $i < $max ; $i++ ) {
        echo $tr[$i]->find('td', 0)->plaintext;
    }

PS. 至於取回輸出結果並解析這塊,我是用 PHP Simple HTML DOM Parser 做的,跟 jQuery 用法相似,簡單上手。

[Facebook] 取得粉絲專頁資訊與最新一筆主題的方法 (PHP/jQuery/ASP.NET(C#))

Standard

想要取得粉絲專頁(粉絲團頁面)的公開資訊,以及該粉絲團最新一筆主題該怎麼做呢?
這邊分成三種版本來講:PHP、jQuery 與 C#.NET。

※由於粉絲專頁幾乎是公開資訊,從 Graph API 就可取得。因此其實也可以不用做 app,直接就可以透過 Graph API 撈取。這邊只有 PHP 是用老作法。

繼續閱讀…

[PHP] 輸出摘要部落格內容時,因標籤不完整關閉而讓版面錯亂的解法

Standard

之前處理某個社群網站部落格的程式時,遇到一個惱人的問題。由於我們為了閱讀方便,並不會將整篇文章在文章彙整模式列出,而是將部分文章內容取出。
好了,你會怎麼作?一般來說,最直覺的是使用 mb_substr() 將欄位內容取出,但萬一使用者寫的這篇內容包含了表格 (table) 會怎樣呢?(無論他是有意還是無意)剛好截到某個 td 標籤的一半,那整個版面可能就這樣亂掉了。
當然把標籤去掉再輸出也是個作法,但這樣並不是個好解法。

當時 Google 到了一個不錯的方案,就是 php 的 tidy 套件。
但似乎並無內建,需自己手動安裝一下。安裝在此就不贅述了。

記錄一下用法:

繼續閱讀…