My favorites | Sign in
Project Home Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php

// a PHP client library for pubsubhubbub
// as defined at http://code.google.com/p/pubsubhubbub/
// written by Josh Fraser | joshfraser.com | josh@eventvue.com
// Released under Apache License 2.0

class Subscriber {

// put your google key here
// required if you want to use the google feed API to lookup RSS feeds
protected $google_key = "";

protected $hub_url;
protected $callback_url;
protected $credentials;
// accepted values are "async" and "sync"
protected $verify = "async";
protected $verify_token;
protected $lease_seconds;

// create a new Subscriber (credentials added for SuperFeedr support)
public function __construct($hub_url, $callback_url, $credentials = false) {

if (!isset($hub_url))
throw new Exception('Please specify a hub url');

if (!preg_match("|^https?://|i",$hub_url))
throw new Exception('The specified hub url does not appear to be valid: '.$hub_url);

if (!isset($callback_url))
throw new Exception('Please specify a callback');

$this->hub_url = $hub_url;
$this->callback_url = $callback_url;
$this->credentials = $credentials;
}

// $use_regexp lets you choose whether to use google AJAX feed api (faster, but cached) or a regexp to read from site
public function find_feed($url, $http_function = false) {
// using google feed API
$url = "http://ajax.googleapis.com/ajax/services/feed/lookup?key={$this->google_key}&v=1.0&q=".urlencode($url);
// fetch the content
if ($http_function)
$response = $http_function($url);
else
$response = $this->http($url);

$result = json_decode($response, true);
$rss_url = $result['responseData']['url'];
return $rss_url;
}

public function subscribe($topic_url, $http_function = false) {
return $this->change_subscription("subscribe", $topic_url, $http_function = false);
}

public function unsubscribe($topic_url, $http_function = false) {
return $this->change_subscription("unsubscribe", $topic_url, $http_function = false);
}

// helper function since sub/unsub are handled the same way
private function change_subscription($mode, $topic_url, $http_function = false) {
if (!isset($topic_url))
throw new Exception('Please specify a topic url');

// lightweight check that we're actually working w/ a valid url
if (!preg_match("|^https?://|i",$topic_url))
throw new Exception('The specified topic url does not appear to be valid: '.$topic_url);

// set the mode subscribe/unsubscribe
$post_string = "hub.mode=".$mode;
$post_string .= "&hub.callback=".urlencode($this->callback_url);
$post_string .= "&hub.verify=".$this->verify;
$post_string .= "&hub.verify_token=".$this->verify_token;
$post_string .= "&hub.lease_seconds=".$this->lease_seconds;

// append the topic url parameters
$post_string .= "&hub.topic=".urlencode($topic_url);

// make the http post request and return true/false
// easy to over-write to use your own http function
if ($http_function)
return $http_function($this->hub_url,$post_string);
else
return $this->http($this->hub_url,$post_string);
}

// default http function that uses curl to post to the hub endpoint
private function http($url, $post_string) {

// add any additional curl options here
$options = array(CURLOPT_URL => $url,
CURLOPT_USERAGENT => "PubSubHubbub-Subscriber-PHP/1.0",
CURLOPT_RETURNTRANSFER => true);

if ($post_string) {
$options[CURLOPT_POST] = true;
$options[CURLOPT_POSTFIELDS] = $post_string;
}

if ($this->credentials)
$options[CURLOPT_USERPWD] = $this->credentials;

$ch = curl_init();
curl_setopt_array($ch, $options);

$response = curl_exec($ch);
$info = curl_getinfo($ch);

// all good -- anything in the 200 range
if (substr($info['http_code'],0,1) == "2") {
return $response;
}
return false;
}
}


?>

Change log

r220 by joshfraz on Aug 21, 2009   Diff
first stab at a php subscriber library.
could use some examples & documentation,
but it's a start.
Go to: 
Project members, sign in to write a code review

Older revisions

All revisions of this file

File info

Size: 4470 bytes, 120 lines
Powered by Google Project Hosting