HINA :: 工程幼稚園


偏執與強迫症的患者,算不上是無可救藥,只是我已經遇上我的良醫了。
 Author
 
Blog Image

my Gmail

Blog Look Score and Rank



Sitetag
 

Category

ALL (790)
Chats (199)
Life (36)
Photography (125)
Novel (60)
Fake stories (146)
Technical support (197)
WACOM (17)
Graphic arts (10)

Authors

Archive

Calendar

«   2010/03   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

  • Total : 526371
  • Today : 16
  • Yesterday : 202
Creative Commons License

本創作適用 姓名標示-非商業性-禁止改作 3.0 創用 CC 授權,台灣並依循所適用的授權條款。
views: 3082 times
超大字體(180%)放大字體(130%)原始字體(100%)
當作是筆記記錄一下,因為之前自己的電腦掛點,資料都掉光光,做一下筆記以防萬一。
首先是要備份或是轉換的地方做資料輸出,輸出的格式就寫成 XML 的格式就好了。例如這樣:
<?xml version="1.0" encoding="UTF-8"?>
<item>
        <response>1</response>
        <id>23200</id>
        <title>新航線</title>
        <content>&lt;b&gt;6月1日長榮航空即將首航日本九州東南部的宮崎縣,對於這個以日本開國神話以及陽光海洋著稱的美麗所在,將成為今年初夏最有魅力的旅遊新航線。&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;!pic1&gt;&lt;br /&gt;宮崎還有一樣推動觀光的秘密武器,就是去年上任的&lt;b&gt;宮崎縣長-東&amp;#22255;原  英夫&lt;/b&gt;,原來是日本普受歡迎的搞笑藝人-&amp;#12381;&amp;#12398;&amp;#12414;&amp;#12435;&amp;#12414;東,選上縣長之後就把藝名封存,將全副熱情投入縣政推動,更把焦點鎖定觀光旅遊的推廣,在宮崎到處都可看到名人縣長的Q版肖像,向來訪的觀光客推銷宮崎名物與觀光景點,使得這位名人縣長也成為宮崎的熱門景觀之一。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;熱帶風情洋溢的宮崎料理&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;位於南九州的宮崎縣,有幽邃神秘的高千&amp;#31298;峽,也有明朗亮麗的陽光碧海,更有誘人的美味料理,讓來訪的味蕾都鼓舌稱快。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;超爽口南蠻燒炸雞塊&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;!pic2&gt;到宮崎一定要品嚐&lt;b&gt;「南蠻燒」&lt;/b&gt;,尤其南蠻燒炸雞塊最為經典。</content>
        <pdate>2008-04-02 19:34:00</pdate>
</item>


然後準備接收端,以 PHP 的環境來說,可以利用 curl module 來做遠端讀取資料的方式。
function getRemoteWithCurl($url) {
    /// use curl module
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $reponse .= @curl_exec($ch);
    if (!curl_errno($ch)) {
        return $reponse;
    } else {
        return false;
    }
    curl_close($ch);
}


然後需要一個 XML 的類,用來方便切割遠端所吐出來的 Response,這裡我直接拿 TextCube 的類來修改,比較方便。因為這個類需要 TextCube 的另一個類,叫做 UTF8 所以也順便做了一個。
然後,假設上述吐出資料的網誌是 http://192.168.1.140/xindex.php?id=23200,那麼程式就是這樣:
$url = "http://192.168.1.141/xindex.php?id=23200";

$response = getRemoteWithCurl($url);
$xml = new XMLTree($response, "utf-8");
if($xml->getValue("/item/response")==1) {
    $post = array();
    /* clean the blank */
    $patternStr = array(' & ',' & #','; ',' < ','< ',' > ',' >', '" ', ' "');
    $replaceStr = array('&','&#',';','<','<','>','>','"', '"');
    /* replace some html tag */
    $sourceHtml = array('<b>','</b>','<p>','</p>');
    $targetHtml = array('<strong>','</strong>','<div>','</>');
    $post['id'] = $xml->getText("/item/id");
    $title = $xml->getText("/item/title");
    $post['title'] = strip_tags(str_replace($patternStr,$replaceStr, $title));
    
    $content = htmlspecialchars_decode($xml->getText("/item/content"), ENT_COMPAT);
    $content = str_replace($patternStr,$replaceStr, $content);
    $content = str_replace($sourceHtml,$targetHtml, $content);
    $post['content'] = htmlUnicode2Utf8($content);
    $created = split(" ", $xml->getText("/item/pdate"));
    $dateline = split("-", $created[0]);
    $timeline = split(":", $created[1]);
    $post['created'] = mktime($timeline[0],$timeline[1],$timeline[2],$dateline[1],$dateline[2],$dateline[0]);

    /* dump to check */
    var_dump($post);
}
?>

其中有一個函式叫做 htmlUnicode2Utf8,它的功用是把 &#12398; 這種 html unicode 轉成我們"人類"看得懂的字,關於這個東西我之前有發過一篇文章說明,就不再贅述了。主要是用 preg_replace_callback 去做,大概需要這些函式:
/* Simple HEX to BIN */
function hex2bin($data) {
    $len = strlen($data);
    return pack("H" . $len, $data);
}
/* Convert UCS-2 to UTF-8 */
function ucs2toutf8($string) {
    return iconv("ucs-2", "utf-8", hex2bin(base_convert($string, 10, 16)));
}
/* Convert matcher Html unicode to utf8 */
function htmlUnicodeToUtf8HEXConvert($m) {
    return ucs2toutf8($m[2]);
}
function htmlUnicode2Utf8($content) {
    return preg_replace_callback('/(&#)([0-9]+)(;)/', "htmlUnicodeToUtf8HEXConvert" , $content);
}

最後,再把這些東西全部包成 shell-script 丟到伺服器去用 crontab 去跑就好了。

創用 CC 授權
Creative Commons License
本創作適用 姓名標示-非商業性-禁止改作 3.0 創用 CC 授權,台灣並依循所適用的授權條款。
Bookmarks
 HEMiDEMi  Technorati  Del.icio.us  Digg  funP  Yahoo!  Furl
 相關文章 
作者資訊
author image
偏執與強迫症的患者,算不上是無可救藥,只是我已經遇上我的良醫了。

Trackback URL : http://blog.hinablue.me/trackback/603


Leave your greetings here.

  1. Comment RSS : http://blog.hinablue.me/rss/comment/603
  2. 秘密訪客 2008/07/22 11:02  Modify/Delete  Reply  Address

    只有管理員能看到的回覆。

    • hina 2008/07/22 14:22  Modify/Delete  Address

      先檢查 session 資料表吧!
      我改天在補上,最近很忙 =_=b

  3. 2008/07/25 10:53  Modify/Delete  Reply  Address

    curl module 我還真的沒用過耶, 多知道一樣東西了:p
    php這邊我目前頂多抓抓遠端的文字資料回來而已
    用fopen比較快^o^

    我在公司都還是寫c#跟asp居多啊, php感覺好多新東西都沒機會玩到

    • hina 2008/07/25 13:22  Modify/Delete  Address

      要不是因為要遠端抓資料,不然也很少用 curl module,只是比較起來 curl 比 fopen 要方便一點就是。我反而是,抓 binary 檔案會用 fopen 而不用 curl,大概是我自己技術不到家的關係吧,哈哈。

      我也想碰碰其他的 language,但是實在沒那個心神啊,而且我現在比較想玩的是 ROR :P

[登入][OpenID是?]
Previous : 1 : ... 218 : 219 : 220 : 221 : 222 : 223 : 224 : 225 : 226 : ... 790 : Next