3

我尝试了 10 多个小时来设置 Google 的 pubsubhubbub 提要(手动 + php),但它不起作用。这是我到目前为止所做的:

  1. 已发布“buystreamme.blogspot.de/feeds/posts/default”

  2. 访问了 pubsubhubbub.appspot.com/subscribe

我的 endpoint.php 看起来像这样:

 <?php
    if (isset($_GET['hub_challenge'])) {
        file_put_contents('verification.txt',"verified");
        header('HTTP/1.1 204 "No Content"', true, 204);
        echo $_GET['hub_challenge'];
        exit;
    }
    else {
        $xml=file_get_contents("php://input");
        file_put_contents('endpoint.txt',$xml);
    }
 ?>

发生了什么(不)?

  1. 订阅后调用endpoint.php,并正确创建了“verification.txt”。
  2. 然后调用“订阅详细信息”,提要的状态保持“未验证”。
  3. 然后在我的测试博客中创建一个新帖子,不调用回调文件“endpoint.php”(不创建输出)。

我究竟做错了什么?

  1. 该提要是一个测试提要,没有订阅者。
  2. 主机是one.com,有什么阻止通话吗?

希望有人可以帮助我。我没有看到错误,其他搜索结果对我没有帮助:(

非常感谢,

托马斯

4

1 回答 1

3

9 小时后,我找到了答案……所以如果有人遇到类似问题,我想分享一下我的想法:

看完这篇文章后

https://groups.google.com/d/msg/pubsubhubbub/7RPlYMds4RI/2mIHQTdV3aoJ

很明显,我必须为 Lease Seconds 输入一些(int)数字并删除所有验证令牌。此外,“同步”的错误返回 HTTP 代码 409 作为验证类型现在已清除,因为“同步”已过时。

总而言之,我认为https://pubsubhubbub.appspot.com/subscribe已经过时了。

我的php解决方案:

<?
$secret = hash('sha1', uniqid(rand(), true));
$post_fields = array(
    'hub.callback' => 'some_php_callback_file_on_your_webspace',
    'hub.mode' => 'subscribe',
    'hub.topic' => 'your_feed', // must be equal to "self" href in feed!
    'hub.verify' => 'async',
    'hub.lease_seconds' => '300', //5 minutes subscription, than feed expires
    'hub.secret' => $secret
);

$request = curl_init('https://pubsubhubbub.appspot.com/'); // the hub
curl_setopt($request, CURLOPT_POST, TRUE);
curl_setopt($request, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($request, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt( $request, CURLOPT_VERBOSE, 1 );
curl_exec($request);
$code = curl_getinfo($request, CURLINFO_HTTP_CODE);
print_r( $code );
if (in_array($code, array(202, 204))) {
  print_r("Positive response - request ($code). - secret: $secret");
}
else {
  print_r("Error issuing - request - ($code).");
}
curl_close($request);
?>

和我的 callback.php 文件:

if (isset($_GET['hub_challenge'])) {
    print $_GET['hub_challenge'];
}
else {
    $xml=file_get_contents("php://input");
    file_put_contents('endpoint.txt',$xml);
}

当然不是最终解决方案,但我对 2 天后的初稿感到满意 :)

于 2013-09-26T00:59:07.880 回答