PHPでPubSubHubbubにパブリッシュする

PubSubHubbubについて

インターネット上のpublish/subscribe パターン(出版/購読型などとも呼ばれる)で配信される情報のためのプロトコル。
Publisherはフィードを配信する側で、Subscriberはフィードを購読する側。WordPressで採用する場合はPublisherはWPを採用しているメディアでSubscriberはGoogle。

PubSubHubbubを利用することでメディア側でのコンテンツの更新を能動的にGoogleへ通知し、インデックスしてもらうことができる。
同様のことはPingなど他のプロトコルでも可能だが、PubSubHubbubでは、非常に高速にフィードをGoogle側に受け取ってもらうことが可能となる。
※PubSubHubbubではPublisherとSubscriberの間にHubというものを置いている。細かい点は時間が空いたらまとめる予定。

Google Trendで見たらけっこう前からあったみたいだし、特に最近話題の技術というわけではなさそう。

https://www.google.co.jp/trends/explore#q=pubsubhubbub

特にPubSubでインデックスのサイクル早くしても検索順位が劇的に上がるとかそういったことはなさそうだけど、スクレイピング対策にはかなり有効そう。

例えば、他のサイトのコンテンツを引用して自サイトのコンテンツのように公開しているキュレーション系のメディア(スクレイパー)が、引用元(オリジンメディア)より上位に表示されたり、ひどい場合は引用元がスパム扱いを受ける場合がある。
スクレイパーより先にGoogleにインデックスされることでオリジンメディアであることを主張できる。

スクレイピングの対象になっているようなメディアなら上記のような恩恵に預かれそうだし、そうでないサイトでも入れておいてまず損はなさそう。

PHPでのパブリッシュ実装

基本WordPressなどのCMSならプラグインを導入すればすぐに導入可能みたいだけど、なんらかの事情でPubSubHubbubへのパブリッシュを実装しなきゃいけない場合は下記のような感じでできる)。
下記はPHPでの例。

class Publisher{
/* プロパティとセッター・ゲッター定義 */
private $pubsubhubsub_hub;

public function get_pubsubhubsub_hub() {
return $this->pubsubhubsub_hub;
}

public function set_pubsubhubsub_hub($pubsubhubsub_hub) {
$this->pubsubhubsub_hub = $pubsubhubsub_hub;
}

/* Publish通知をハブに送信 */
public function publish($url) {
$post_data = ‘hub.mode=publish&hub.url;=’ . urlencode($url);
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_URL, $this->pubsubhubsub_hub);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Content-Length: ‘ . strlen($post_data)));
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
$result = (204 == $info[‘http_code’]);
curl_close($ch);

return $result;
}
}

/* ハブに送信 */
$url = ‘http://linuxserver.jp/seo/pubsubhubbub.php’; // ここで通知したいURLを指定
$publisher = new Publisher();
$publisher->set_pubsubhubsub_hub(‘https://pubsubhubbub.appspot.com/’); // ハブのURLを指定
if ($publisher->publish($url)) {
echo “パブリッシュしました。”;
} else {
echo “パブリッシュできませんでした。”;
}

GoogleのPubSubHubbub Hubにパブリッシュするときは下記の規約(?)に従う必要がある。

リクエストメソッドはPOSTで行う
HTTPヘッダでコンテンツタイプに”application/x-www-form-urlencoded”を指定する(“Content-Type: application/x-www-form-urlencoded”)
hub.mode(値は”publish”であること)と、hub.urlのふたつのパラメータが必要。また、値はURLエンコードされていること
下記URLのフォームから手動でパブリッシュすることも可能。
https://pubsubhubbub.appspot.com/publish

UbuntuでのEclipse再インストール

UbuntuでのEclipse再インストール

Ubuntu13.10から14.01にアップグレードするとあるJavaのプロジェクトが動かなくなったのでEclipseを再インストールした。
そのときのメモ。

下記手順でアンインストール。

$ sudo apt-get purge eclipse*
$ sudo apt-get autoremove
$ sudo rm -rf /usr/lib/eclipse
$ sudo rm /etc/eclipse.ini
$ rm -rf ~/.eclipse

`sudo rm -rf /usr/lib/eclipse`を飛ばすとEclipse立ち上げた後の新規ソフトウェアのインストールでコケた。

アンインストールが完了したら下記手順でインストール。

$ sudo apt-get install pleiades
$ vim /etc/eclipse.ini ※末尾に下記の1行を追記
-javaagent:/usr/share/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
$ eclipse -clean & ※編集完了後に一度-cleanオプションを付加してEclipseを起動。以降は-cleanオプションは不要。

シェル、sh

shellでの$$(ダラーマーク/ドルマークが2つ並んでいる)の意味
ログインしたシェルのプロセスIDを知ることができます。
ttps://kamotora.net/system/aix/shell-doubledolloar-mark/

AWKプログラミング
レコードの先頭から$1、$2、$3
レコードの末尾からは$NF、$(NF – 1)、$(NF – 2) ……と定義されます。
This is a pen.
$1 $2 $3 $4
$(NF – 3) $(NF – 2) $(NF – 1) $NF
https://codezine.jp/article/detail/7852

Linuxでのドル記号「$(…)」の意味と使い方
$ echo “現在のディレクトリは、$(pwd)です”
現在のディレクトリは、/home/userです

Linuxでのドル記号「$(…)」の意味と使い方

bashの配列 @(アットマーク)と *(アスタリスク)の違い
どちらも全件抽出ではあるが、@(アットマーク)の方がきれいにでる
https://qiita.com/mtomoaki_96kg/items/ff82305f1ff4bb4c827c

シェルスクリプトの % (パーセント記号)の意味
https://it-soudan.com/meaning-of-percent-symbol-of-shell-parameter-expansion/

シェルの入力制御
https://qiita.com/tag1216/items/7ce35b7c27d371165e56

http://x68000.q-e-d.net/~68user/unix/pickup?%A5%B7%A5%A7%A5%EB%B5%AD%B9%E6%CE%E0%A4%DE%A4%C8%A4%E1

改行コードに気を付ける
https://qiita.com/b4b4r07/items/9ea50f9ff94973c99ebe

【シェルスクリプト】ファイルの中身を一行ずつ読み込む方法

【シェルスクリプト】ファイルの中身を一行ずつ読み込む方法

echo オプション eは改行を出力(hをつけると表示されないので省略)
ttps://eng-entrance.com/linux-command-echo

単項演算子が予期されますを防ぐ

「単項演算子が予期されます」を抑制する