送信Pingを手動で送る

にほんブログ村のようなブログのランキングサイトにはブログからの更新の通知を受け取るサーバーが用意されていて、そのサーバーに更新情報(更新Ping)を送ることができる。

既存のブログサービスを利用する場合は更新したタイミングで更新Pingを自動で送る機能が用意されていることが多いが、このサイトのように静的サイトジェネレーターで生成したサイトでも更新Pingを送ることができないか調べた。

仕様に合わせたXMLをHTTPでサーバーに送信すればよいようだ。

Powershellでデータを送信してみたところ以下の方法で受信成功のレスポンスが返ってくることを確認した。なお、サーバーによってweblogUpdates.ping、weblogUpdates.extendedPingどちらのフォーマットを受け付けるかは違うようだ。

なお、Powershellはデフォルトの設定ではレスポンスの内容が省略されて表示される問題があり、その対策としてFormatEnumerationLimitの設定を入れている。

weblogUpdates.pingの場合

$ping = @'
<?xml version="1.0"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
 <param>
  <value>
   <string>vinca.log</string>
  </value>
 </param>
 <param>
  <value>
   <string>https://vincaroz.neocities.org/</string>
  </value>
 </param>
 <param>
  <value>
   <string>https://vincaroz.neocities.org/atom.xml</string>
  </value>
 </param>
 </params>
</methodCall>
'@

$FormatEnumerationLimit = -1
Invoke-WebRequest http://ping.fc2.com/ -Headers @{'Content-Type'='text/xml'} -Method post -Body $ping -Verbose | Format-Table -AutoSize -Wrap

weblogUpdates.extendedPingの場合

$pingex = @'
<?xml version="1.0"?>
<methodCall>
  <methodName>weblogUpdates.extendedPing</methodName>
  <params>
    <param>
      <value>vinca.log</value>
    </param>
    <param>
      <value>https://vincaroz.neocities.org/</value>
    </param>
    <param>
      <value>https://vincaroz.neocities.org/</value>
    </param>
    <param>
      <value>https://vincaroz.neocities.org/atom.xml</value>
    </param>
  </params>
</methodCall>
'@

$FormatEnumerationLimit = -1
Invoke-WebRequest https://ping.blogmura.com/xmlrpc/xxxx/ -Headers @{'Content-Type'='text/xml'} -Method post -Body $pingex -Verbose | Format-Table -AutoSize -Wrap