首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Typecho 插件開發教程(六):調用百度推送 API、Typecho_Http_Client 封裝與日誌記錄

     編輯:PHP 相關知識

Typecho 插件開發教程(六):調用百度推送 API、Typecho_Http_Client 封裝與日誌記錄

核心邏輯已獲取永久鏈接,本節實現 send_post() 方法:構建推送數組、調用百度站長 API、記錄推送日誌。對比原生 cURL 與 Typecho 內置 Typecho_Http_Client 兩種實現,推薦後者兼容性更好。

1. 原生 cURL 實現(參考)

public static function send_post($url, $options) {
    $api = $options->plugin('BaiduSubmitTest')->api;
    $urls = is_array($url) ? $url : array($url);

    $ch = curl_init();
    $opts = array(
        CURLOPT_URL            => $api,
        CURLOPT_POST           => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POSTFIELDS     => implode("\n", $urls),
        CURLOPT_HTTPHEADER     => array('Content-Type: text/plain'),
    );
    curl_setopt_array($ch, $opts);
    $result = curl_exec($ch);
    file_put_contents('/tmp/send_log', date('H:i:s') . ' ' . $result . "\n", FILE_APPEND);
}

返回示例:{"remain":48,"success":1} 表示當日剩餘配額 48、本次成功推送 1 條。

2. Typecho_Http_Client 實現(推薦)

public static function send_post($url, $options) {
    $api = $options->plugin('BaiduSubmitTest')->api;
    $urls = is_array($url) ? $url : array($url);

    // 環境檢查:需 curl 擴展或 allow_url_fopen
    if (false == Typecho_Http_Client::get()) {
        throw new Typecho_Plugin_Exception(_t('對不起, 您的主機不支持 php-curl 擴展而且沒有打開 allow_url_fopen 功能, 無法正常使用此功能'));
    }

    $http = Typecho_Http_Client::get();
    $http->setData(implode("\n", $urls));
    $http->setHeader('Content-Type', 'text/plain');
    $result = $http->send($api);

    // 記錄日誌
    file_put_contents('/tmp/send_log', date('H:i:s') . ' ' . $result . "\n", FILE_APPEND);
}

3. Typecho_Http_Client 優勢

  • **自動降級**:檢測環境優先用 cURL,無 cURL 則用 fopen 流上下文,兼容性極強。
  • **統一介面**:setData()/setHeader()/send() 鏈式調用,代碼更清晰。
  • **框架集成**:異常拋出 Typecho_Plugin_Exception,符合插件規範,後台可捕獲展示。

4. 日誌改進建議

  • 路徑可配置:$options->plugin('BaiduSubmitTest')->log_path。
  • 格式化:JSON 結構化日誌,含 URL、響應碼、耗時、成功/失敗標記。
  • 輪轉:單文件易膨脹,建議按日期分文件或接入 Monolog/系統日誌。
  • 敏感信息脫敏:API Token 不入日誌。

5. 結構優化預告

目前邏輯分散在 send()(獲取鏈接)與 send_post()(推送),下一步將合併優化:send() 內部直接調用 send_post(),異常統一捕獲、重試機制、批量推送合併(單次最多 2000 條),構建生產級推送模塊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved