接地施工


如果公寓房屋沒有接地,自行DIY做假接地線可行嗎?

【Qt】QHttp


【目的】

  • 透過 QHttp 呼叫 Google Translation API 。

【觀念】

  • 網路上有兩個範例
    1. Qt4 Gossip: QHttp http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/QHttp.html
    2. Qt Network(1)  http://wiki.oss.org.tw/index.php/Qt_Network(1)
    由於QHttpd發出的請求是非同步的,範例二難以掌握下載進度, 有時會出問題,建議以範例一為主。
  • 但第一個範例如果需要抓取內含 Query String 的 Url 的話,會出現漏掉Query String 問題,以下為例
    http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=hello&langpair=en|ru
    用該程式送出,會發現回傳 400(responseStatus),猜測應該是結果有問題。
    {"responseData": null, "responseDetails": "invalid version", "responseStatus": 400}
    用 WireShark 觀察,就可看出原來只送出
    GET /ajax/services/language/translate HTTP/1.1
    問題看起來就是後面的 Query String 沒送出讓 Google Translation 弄迷糊了。
    image
  • 要解決這問題,請將 HttpGet.cpp 裡面原本的
    http->get(url.path(), file);
    改成
    http->get(url.toEncoded(), file);
  • 如果只要抓網頁資料的話,也可嘗試QWebView。

【程式】

  • 開一個 Qt GUI Application。
  • 類別還是套用第一個範例的 HttpGet類別(HttpGet.cpp/HttpGet.h)。
  • maic.cpp
    #include <QtGui/QApplication>
    #include "dialog.h"
    #include <QUrl>
    #include "HttpGet.h"
    #include <iostream>
    #include <QDebug>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Dialog w;
        w.show();
    
        HttpGet getter;
        QUrl url("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=hello&langpair=en|ru");
        getter.downloadFile(QUrl(url));
        QObject::connect(&getter, SIGNAL(finished()), &a, SLOT(quit()));
    
        return a.exec();
    }

【結果】

  • 打開檔案 translate 就可看到結果。responseStatus 為 200 代表成功。
    {"responseData": {"translatedText":"привет"}, "responseDetails": null, "responseStatus": 200}

【問題】

  • 如何改成透過使用者 click 一個 push button 來抓取資料,而不是直接放在 main.c 中。
  • Qt Demo | Networking | Http Client 嘗試跑一樣的 Query String。
    image 
    由 WireShark 看起來封包傳送與接收都是成功的。
    image 
    但打開 translate 這檔案,裡面卻是空的。此問題再找時間研究。(好像是 Vista 上的防毒軟檔Norton檔掉了存檔的動作,之前此範例在 Windows XP 上是成功的)

【其它】

  • 此方法也可下載 Google 語音。請記得將下載完後的 translate_tts 改成 translate.mp3 即可。
    但目前看起來英文是可行,其他如中文與俄文還需再研究。

【參考】

 

Ed32. Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com