Pingback和Xml-RPC
提醒:本文最後更新於 2813 天前,文中所描述的資訊可能已發生改變,請謹慎使用。
WordPress有一個功能:當有人引用本站文章時,會新增一條評論在文後,顯示引用頁面的資訊;發部落格時WordPress也會通知文章內每個連結,讓它知道自己被引用了。這個功能非常贊,讓部落格間的互動變得更容易。
改用自己的部落格系統後,還想用這麼高階的功能,只有靠自己了。搜尋得知,這個功能叫Pingback,是基於XML-RPC的一個協議。Pingback功能需要實現一個xmlprc client,在文章更新時ping對方服務;以及一個xmlrpc server,來接受其它伺服器發過來的ping。
先研究下
來嘗試下寫個xmlrpc客戶端:
from xmlrpclib import ServerProxy
from pprint import pprint
s = ServerProxy('http://www.aoao.org.cn/xmlrpc.php')
pprint(s.system.listMethods())
這段程式碼執行完,輸出了aoao同學提供的好多方法。那些metaWeblog、blogger、wt、wp開頭的都是跟部落格管理有關的,呼叫時需要傳帳號密碼,就先不玩了。試下addTwoNumbers和sayHello,看名字應該可以玩:
>>> s.demo.addTwoNumbers(1, 2)
3
>>> s.system.multicall([{'methodName':'demo.addTwoNumbers','params':[1,2]},{'met
hodName':'demo.sayHello','params':[]}])
[[3], ['Hello!']]
果然成功了。看起來跟本地函式一樣的呼叫形式,xmlrpclib卻在後臺把輸入引數拼裝成xml,post給遠端服務,再拿到返回的xml資料解析出返回值。也支援多個方法批量呼叫,真是太讚了~
回過頭來看Pingback協議
- 先找出文章中所有連結,還要找出連結對應的xmlrpc(pingback) server;
- 呼叫該server的pingback.ping方法,把本文連結和對方連結作為引數傳過去;
- 處理返回狀態,記錄下這次pingback的資訊,這是為了避免更新文章時多次ping。
官方文章中提供了兩種方案從一個連結找到對應的xmlrpc server:
- 查詢該連結response header裡的X-Pingback欄位;
- 查詢該連結頁面裡的標記。
萬能的python搭建一個xmlrpc服務也很簡單:
from SimpleXMLRPCServer import SimpleXMLRPCServer
def sayHello(name='Kitty'):
return 'Hello %s' % name
server = SimpleXMLRPCServer(("localhost", 8000))
server.register_function(sayHello, 'hello')
server.serve_forever()
>>> from xmlrpclib import ServerProxy
>>> s = ServerProxy('http://localhost:8000')
>>> s.hello()
'Hello Kitty'
>>> s.hello('Jerry Qu')
'Hello Jerry Qu'
沒問題。剩下的工作就是實現一個能提供pingback.ping方法的xmlrpc server了。看了wordpress的實現,感覺還是挺複雜的,記下來:
- 從過來的xml中解析出pagelinkedfrom(來源url)和pagelinkedto(被請求url);
- 根據pagelinkedto找出被請求頁面post_ID,wp支援多種格式的文章連結,找post_Id這部分程式碼非常糾結;
- 抓取pagelinkedfrom網頁內容,提取標題,並找出pagelinkedfrom的位置,並提取該位置附近的文字作為摘要,這一步程式碼也非常複雜;
- 將上一步得到的標題、摘要、和pagelinkedfrom新增到被請求頁面的評論中;
- 上面任何一步出現異常都將終止流程並返回異常,否則記錄該pingback狀態,返回成功。
由此可見,wordpress為了實現pingback出現在評論裡,以及智慧提取摘要的功能,寫了非常多的程式碼。
最後,原理都弄明白了,就等找時間開工了。
--EOF--
提醒:本文最後更新於 2813 天前,文中所描述的資訊可能已發生改變,請謹慎使用。
相關推薦
Pingback和Xml-RPC
提醒:本文最後更新於 2813 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 WordPress有一個功能:當有人引用本站文章時,會新增一條評論在文後,顯示引用頁面的資訊;發部落格時WordPress也會通知文章內每個連結,讓它知道自己被引用了。這個功能非常贊,讓部落格間的互動變得更容易。 改
JAVA實現XML-RPC客戶端和服務端
客戶端程式碼: package test_xmlrpc.test; import java.net.URL; import java.util.ArrayList; import java.uti
開啟kbmmw 5.09 中的XML-RPC和 JSON-RPC 服務
需要 image src bubuko 技術 編譯 sports 設置 文件 kbmmw 5.09 裏面增加了XML-RPC和 JSON-RPC 服務支持,但是默認沒有開啟。 需要在安裝前,修改kbmMWConfig.inc文件。 加入以下定義 {$DEFI
json和xml封裝數據、數據緩存到文件中
用戶 lena 數據緩存 完全 數據類型 lin print 函數 response 一、APP的通信格式之xml xml:擴展標記語言,可以用來標記數據,定義數據類型,是一種允許用戶對自己標記語言進行定義的源語言。XML格式統一,擴平臺語言,非常適合數據傳輸和通信,業界
XML-RPC筆記
static stream table brush 方法調用 imp property json-rpc 包裝 1.什麽是XML-RPC RPC(Remote Procedure Call)就是相當於提供了一種“遠程接口”來供外部系統調用,常用於不同平臺、不同架構的系統
快來看看Google出品的Protocol Buffer,別僅僅會用Json和XML了
println 輸出流 基本數據類型 下一個 ebr sid 官網 序列 reg 前言 習慣用 Json、XML 數據存儲格式的你們,相信大多都沒聽過Protocol Buffer Protocol Buffer 事實上 是 Google出品的一種輕
數組和xml的互相轉換的封裝函數
iss 數組 nbsp bsp load val urn document ray /** * 數組轉換為xml * * @param array $arr * @param int $level * @return strin
【jQuery】jQ處理xml文件和xml字符串
文本 技術 字符串 處理 兼容 child nodevalue url att 1.xml文件 <?xml version="1.0" encoding="utf-8" ?> <root> <book id="1">
netconf、yang和XML關系
信息 right 重要 學習 一點 proc text mod 有助於 netconf是基於xml的網絡配置協議,文檔RFC6241有詳細介紹。 yang是為netconf建模的一種數據建模語言。文檔RFC2060詳細介紹了yang1.0版本,RFC7950介
json字符串和xml的 比較
讀取 def 編程語言 使用 總結 ati color ota www json是ajax前戲,在前後端傳輸數據都要用到json json是一種輕量級的數據交換格式, (JavaScript Objects Notation ,js對象標記),與JavaScript有關
ajax ---- json 和 xml 區別
需要 pro ces 文件格式 很多 pos 使用 基本 perl 2.XML和JSON優缺點 (1).XML的優缺點<1>.XML的優點 A.格式統一,符合標準; B.容易與其他系統進行遠程交互,數據共享比較方便。<2>.XML的缺點 A.X
java對象和xml的轉換
bubuko win create leo div etc 分享圖片 input string 關於java轉對象,還有別的方法,這裏我就簡單的介紹一下這個。當然在轉對象的過程中,必須加註釋。 1.將Java對象轉換為XML public static <T&
AspectJ註解版和XML版
post 規範 {} spring imp sele aik update sel 什麽是AspectJ? AspectJ是一個面向切面的框架,它擴展了Java語言。AspectJ定義了AOP語法,所以它有一個專門的編譯器用來生成遵守Java字節編碼規範的Class文件。
PHP數組和XML相互轉換的函數
ret val ble lib key decode 轉換 相互 simplexml //數組轉xml function ArrtoXml($arr) { if(!is_array($arr) || count($arr) == 0) ret
Python-Json字符串和XML解析
all 創建 目標 有效 語言 系列化 res 組成 tag Python-json字符串和xml解析 JSON:JavaScript Object Notation(JavaScript 對象表示法) JSON是存儲和交換文本信息的語法,類似XML JSON比
html和xml的區別
hyper TP 模式 規則 html中 可能 for 有時 都是 https://www.cnblogs.com/keyi/p/7131391.html 一、HTML HTML(HyperTextMark-upLanguage)即超文本標記語言,是WWW的
MyEclipse背景與字體大小和xml文件中字體大小調整
ref 代碼 AS 需要 ML ont reference round 時間 1、打開window / Preference,彈出Preference面板 2、展開General標簽,選中Editors選項,展開。 3、選中 Text Editors,右邊出現TestEdi
eclipse添加dtd約束和xml約束的方法
bean str ima bsp xml約束 cli 命名 src 位置 struts-2.3.dtd dtd 文件的位置 導入上面的 dtd 約束 spring-beans-4.2.xsd 為主配
mybatis 註解和xml 優缺點
麻煩 好用 標記 tis 報錯 成功 知識 關鍵字 註入 xml: 增加了xml文件,修改麻煩,條件不確定(ifelse判斷),容易出錯,特殊轉義字符比如大於小於 註釋: 復雜sql不好用,搜集sql不方便,管理不方便,修改需重新編譯 #和$區別: 相同 都是對
異步的javascript和XML-AJAX
css 部分 sta response html range 動態性 我們 參考 AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。AJAX 不是新的編程語言,而是一種使用現有標準的新方法。AJAX 最