|
1 <?php |
|
2 /** |
|
3 * Zend Framework |
|
4 * |
|
5 * LICENSE |
|
6 * |
|
7 * This source file is subject to the new BSD license that is bundled |
|
8 * with this package in the file LICENSE.txt. |
|
9 * It is also available through the world-wide-web at this URL: |
|
10 * http://framework.zend.com/license/new-bsd |
|
11 * If you did not receive a copy of the license and are unable to |
|
12 * obtain it through the world-wide-web, please send an email |
|
13 * to license@zend.com so we can send you a copy immediately. |
|
14 * |
|
15 * @category Zend |
|
16 * @package Zend_Service |
|
17 * @subpackage Technorati |
|
18 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) |
|
19 * @license http://framework.zend.com/license/new-bsd New BSD License |
|
20 * @version $Id: Weblog.php 20096 2010-01-06 02:05:09Z bkarwin $ |
|
21 */ |
|
22 |
|
23 |
|
24 /** |
|
25 * @see Zend_Service_Technorati_Author |
|
26 */ |
|
27 require_once 'Zend/Service/Technorati/Author.php'; |
|
28 |
|
29 /** |
|
30 * @see Zend_Service_Technorati_Utils |
|
31 */ |
|
32 require_once 'Zend/Service/Technorati/Utils.php'; |
|
33 |
|
34 |
|
35 /** |
|
36 * Represents a Weblog object successful recognized by Technorati. |
|
37 * |
|
38 * @category Zend |
|
39 * @package Zend_Service |
|
40 * @subpackage Technorati |
|
41 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) |
|
42 * @license http://framework.zend.com/license/new-bsd New BSD License |
|
43 */ |
|
44 class Zend_Service_Technorati_Weblog |
|
45 { |
|
46 /** |
|
47 * Blog name as written in the feed. |
|
48 * |
|
49 * @var string |
|
50 * @access protected |
|
51 */ |
|
52 protected $_name; |
|
53 |
|
54 /** |
|
55 * Base blog URL. |
|
56 * |
|
57 * @var Zend_Uri_Http |
|
58 * @access protected |
|
59 */ |
|
60 protected $_url; |
|
61 |
|
62 /** |
|
63 * RSS feed URL, if any. |
|
64 * |
|
65 * @var null|Zend_Uri_Http |
|
66 * @access protected |
|
67 */ |
|
68 protected $_rssUrl; |
|
69 |
|
70 /** |
|
71 * Atom feed URL, if any. |
|
72 * |
|
73 * @var null|Zend_Uri_Http |
|
74 * @access protected |
|
75 */ |
|
76 protected $_atomUrl; |
|
77 |
|
78 /** |
|
79 * Number of unique blogs linking this blog. |
|
80 * |
|
81 * @var integer |
|
82 * @access protected |
|
83 */ |
|
84 protected $_inboundBlogs; |
|
85 |
|
86 /** |
|
87 * Number of incoming links to this blog. |
|
88 * |
|
89 * @var integer |
|
90 * @access protected |
|
91 */ |
|
92 protected $_inboundLinks; |
|
93 |
|
94 /** |
|
95 * Last blog update UNIX timestamp. |
|
96 * |
|
97 * @var null|Zend_Date |
|
98 * @access protected |
|
99 */ |
|
100 protected $_lastUpdate; |
|
101 |
|
102 /** |
|
103 * Technorati rank value for this weblog. |
|
104 * |
|
105 * Note. This property has no official documentation. |
|
106 * |
|
107 * @var integer |
|
108 * @access protected |
|
109 */ |
|
110 protected $_rank; |
|
111 |
|
112 /** |
|
113 * Blog latitude coordinate. |
|
114 * |
|
115 * Note. This property has no official documentation. |
|
116 * |
|
117 * @var float |
|
118 * @access protected |
|
119 */ |
|
120 protected $_lat; |
|
121 |
|
122 /** |
|
123 * Blog longitude coordinate. |
|
124 * |
|
125 * Note. This property has no official documentation. |
|
126 * |
|
127 * @var float |
|
128 * @access protected |
|
129 */ |
|
130 protected $_lon; |
|
131 |
|
132 /** |
|
133 * Whether the author who claimed this weblog has a photo. |
|
134 * |
|
135 * Note. This property has no official documentation. |
|
136 * |
|
137 * @var bool |
|
138 * @access protected |
|
139 * @see Zend_Service_Technorati_Author::$thumbnailPicture |
|
140 */ |
|
141 protected $_hasPhoto = false; |
|
142 |
|
143 /** |
|
144 * An array of Zend_Service_Technorati_Author who claimed this blog |
|
145 * |
|
146 * @var array |
|
147 * @access protected |
|
148 */ |
|
149 protected $_authors = array(); |
|
150 |
|
151 |
|
152 /** |
|
153 * Constructs a new object from DOM Element. |
|
154 * |
|
155 * @param DomElement $dom the ReST fragment for this object |
|
156 */ |
|
157 public function __construct(DomElement $dom) |
|
158 { |
|
159 $xpath = new DOMXPath($dom->ownerDocument); |
|
160 |
|
161 $result = $xpath->query('./name/text()', $dom); |
|
162 if ($result->length == 1) $this->setName($result->item(0)->data); |
|
163 |
|
164 $result = $xpath->query('./url/text()', $dom); |
|
165 if ($result->length == 1) $this->setUrl($result->item(0)->data); |
|
166 |
|
167 $result = $xpath->query('./inboundblogs/text()', $dom); |
|
168 if ($result->length == 1) $this->setInboundBlogs($result->item(0)->data); |
|
169 |
|
170 $result = $xpath->query('./inboundlinks/text()', $dom); |
|
171 if ($result->length == 1) $this->setInboundLinks($result->item(0)->data); |
|
172 |
|
173 $result = $xpath->query('./lastupdate/text()', $dom); |
|
174 if ($result->length == 1) $this->setLastUpdate($result->item(0)->data); |
|
175 |
|
176 /* The following elements need more attention */ |
|
177 |
|
178 $result = $xpath->query('./rssurl/text()', $dom); |
|
179 if ($result->length == 1) $this->setRssUrl($result->item(0)->data); |
|
180 |
|
181 $result = $xpath->query('./atomurl/text()', $dom); |
|
182 if ($result->length == 1) $this->setAtomUrl($result->item(0)->data); |
|
183 |
|
184 $result = $xpath->query('./author', $dom); |
|
185 if ($result->length >= 1) { |
|
186 foreach ($result as $author) { |
|
187 $this->_authors[] = new Zend_Service_Technorati_Author($author); |
|
188 } |
|
189 } |
|
190 |
|
191 /** |
|
192 * The following are optional elements |
|
193 * |
|
194 * I can't find any official documentation about the following properties |
|
195 * however they are included in response DTD and/or test responses. |
|
196 */ |
|
197 |
|
198 $result = $xpath->query('./rank/text()', $dom); |
|
199 if ($result->length == 1) $this->setRank($result->item(0)->data); |
|
200 |
|
201 $result = $xpath->query('./lat/text()', $dom); |
|
202 if ($result->length == 1) $this->setLat($result->item(0)->data); |
|
203 |
|
204 $result = $xpath->query('./lon/text()', $dom); |
|
205 if ($result->length == 1) $this->setLon($result->item(0)->data); |
|
206 |
|
207 $result = $xpath->query('./hasphoto/text()', $dom); |
|
208 if ($result->length == 1) $this->setHasPhoto($result->item(0)->data); |
|
209 } |
|
210 |
|
211 |
|
212 /** |
|
213 * Returns weblog name. |
|
214 * |
|
215 * @return string Weblog name |
|
216 */ |
|
217 public function getName() |
|
218 { |
|
219 return $this->_name; |
|
220 } |
|
221 |
|
222 /** |
|
223 * Returns weblog URL. |
|
224 * |
|
225 * @return null|Zend_Uri_Http object representing weblog base URL |
|
226 */ |
|
227 public function getUrl() |
|
228 { |
|
229 return $this->_url; |
|
230 } |
|
231 |
|
232 /** |
|
233 * Returns number of unique blogs linking this blog. |
|
234 * |
|
235 * @return integer the number of inbound blogs |
|
236 */ |
|
237 public function getInboundBlogs() |
|
238 { |
|
239 return $this->_inboundBlogs; |
|
240 } |
|
241 |
|
242 /** |
|
243 * Returns number of incoming links to this blog. |
|
244 * |
|
245 * @return integer the number of inbound links |
|
246 */ |
|
247 public function getInboundLinks() |
|
248 { |
|
249 return $this->_inboundLinks; |
|
250 } |
|
251 |
|
252 /** |
|
253 * Returns weblog Rss URL. |
|
254 * |
|
255 * @return null|Zend_Uri_Http object representing the URL |
|
256 * of the RSS feed for given blog |
|
257 */ |
|
258 public function getRssUrl() |
|
259 { |
|
260 return $this->_rssUrl; |
|
261 } |
|
262 |
|
263 /** |
|
264 * Returns weblog Atom URL. |
|
265 * |
|
266 * @return null|Zend_Uri_Http object representing the URL |
|
267 * of the Atom feed for given blog |
|
268 */ |
|
269 public function getAtomUrl() |
|
270 { |
|
271 return $this->_atomUrl; |
|
272 } |
|
273 |
|
274 /** |
|
275 * Returns UNIX timestamp of the last weblog update. |
|
276 * |
|
277 * @return integer UNIX timestamp of the last weblog update |
|
278 */ |
|
279 public function getLastUpdate() |
|
280 { |
|
281 return $this->_lastUpdate; |
|
282 } |
|
283 |
|
284 /** |
|
285 * Returns weblog rank value. |
|
286 * |
|
287 * Note. This property is not documented. |
|
288 * |
|
289 * @return integer weblog rank value |
|
290 */ |
|
291 public function getRank() |
|
292 { |
|
293 return $this->_rank; |
|
294 } |
|
295 |
|
296 /** |
|
297 * Returns weblog latitude coordinate. |
|
298 * |
|
299 * Note. This property is not documented. |
|
300 * |
|
301 * @return float weblog latitude coordinate |
|
302 */ |
|
303 public function getLat() { |
|
304 return $this->_lat; |
|
305 } |
|
306 |
|
307 /** |
|
308 * Returns weblog longitude coordinate. |
|
309 * |
|
310 * Note. This property is not documented. |
|
311 * |
|
312 * @return float weblog longitude coordinate |
|
313 */ |
|
314 public function getLon() |
|
315 { |
|
316 return $this->_lon; |
|
317 } |
|
318 |
|
319 /** |
|
320 * Returns whether the author who claimed this weblog has a photo. |
|
321 * |
|
322 * Note. This property is not documented. |
|
323 * |
|
324 * @return bool TRUE if the author who claimed this weblog has a photo, |
|
325 * FALSE otherwise. |
|
326 */ |
|
327 public function hasPhoto() |
|
328 { |
|
329 return (bool) $this->_hasPhoto; |
|
330 } |
|
331 |
|
332 /** |
|
333 * Returns the array of weblog authors. |
|
334 * |
|
335 * @return array of Zend_Service_Technorati_Author authors |
|
336 */ |
|
337 public function getAuthors() |
|
338 { |
|
339 return (array) $this->_authors; |
|
340 } |
|
341 |
|
342 |
|
343 /** |
|
344 * Sets weblog name. |
|
345 * |
|
346 * @param string $name |
|
347 * @return Zend_Service_Technorati_Weblog $this instance |
|
348 */ |
|
349 public function setName($name) |
|
350 { |
|
351 $this->_name = (string) $name; |
|
352 return $this; |
|
353 } |
|
354 |
|
355 /** |
|
356 * Sets weblog URL. |
|
357 * |
|
358 * @param string|Zend_Uri_Http $url |
|
359 * @return void |
|
360 * @throws Zend_Service_Technorati_Exception if $input is an invalid URI |
|
361 * (via Zend_Service_Technorati_Utils::normalizeUriHttp) |
|
362 */ |
|
363 public function setUrl($url) |
|
364 { |
|
365 $this->_url = Zend_Service_Technorati_Utils::normalizeUriHttp($url); |
|
366 return $this; |
|
367 } |
|
368 |
|
369 /** |
|
370 * Sets number of inbound blogs. |
|
371 * |
|
372 * @param integer $number |
|
373 * @return Zend_Service_Technorati_Weblog $this instance |
|
374 */ |
|
375 public function setInboundBlogs($number) |
|
376 { |
|
377 $this->_inboundBlogs = (int) $number; |
|
378 return $this; |
|
379 } |
|
380 |
|
381 /** |
|
382 * Sets number of Iinbound links. |
|
383 * |
|
384 * @param integer $number |
|
385 * @return Zend_Service_Technorati_Weblog $this instance |
|
386 */ |
|
387 public function setInboundLinks($number) |
|
388 { |
|
389 $this->_inboundLinks = (int) $number; |
|
390 return $this; |
|
391 } |
|
392 |
|
393 /** |
|
394 * Sets weblog Rss URL. |
|
395 * |
|
396 * @param string|Zend_Uri_Http $url |
|
397 * @return Zend_Service_Technorati_Weblog $this instance |
|
398 * @throws Zend_Service_Technorati_Exception if $input is an invalid URI |
|
399 * (via Zend_Service_Technorati_Utils::normalizeUriHttp) |
|
400 */ |
|
401 public function setRssUrl($url) |
|
402 { |
|
403 $this->_rssUrl = Zend_Service_Technorati_Utils::normalizeUriHttp($url); |
|
404 return $this; |
|
405 } |
|
406 |
|
407 /** |
|
408 * Sets weblog Atom URL. |
|
409 * |
|
410 * @param string|Zend_Uri_Http $url |
|
411 * @return Zend_Service_Technorati_Weblog $this instance |
|
412 * @throws Zend_Service_Technorati_Exception if $input is an invalid URI |
|
413 * (via Zend_Service_Technorati_Utils::normalizeUriHttp) |
|
414 */ |
|
415 public function setAtomUrl($url) |
|
416 { |
|
417 $this->_atomUrl = Zend_Service_Technorati_Utils::normalizeUriHttp($url); |
|
418 return $this; |
|
419 } |
|
420 |
|
421 /** |
|
422 * Sets weblog Last Update timestamp. |
|
423 * |
|
424 * $datetime can be any value supported by |
|
425 * Zend_Service_Technorati_Utils::normalizeDate(). |
|
426 * |
|
427 * @param mixed $datetime A string representing the last update date time |
|
428 * in a valid date time format |
|
429 * @return Zend_Service_Technorati_Weblog $this instance |
|
430 * @throws Zend_Service_Technorati_Exception |
|
431 */ |
|
432 public function setLastUpdate($datetime) |
|
433 { |
|
434 $this->_lastUpdate = Zend_Service_Technorati_Utils::normalizeDate($datetime); |
|
435 return $this; |
|
436 } |
|
437 |
|
438 /** |
|
439 * Sets weblog Rank. |
|
440 * |
|
441 * @param integer $rank |
|
442 * @return Zend_Service_Technorati_Weblog $this instance |
|
443 */ |
|
444 public function setRank($rank) |
|
445 { |
|
446 $this->_rank = (int) $rank; |
|
447 return $this; |
|
448 } |
|
449 |
|
450 /** |
|
451 * Sets weblog latitude coordinate. |
|
452 * |
|
453 * @param float $coordinate |
|
454 * @return Zend_Service_Technorati_Weblog $this instance |
|
455 */ |
|
456 public function setLat($coordinate) |
|
457 { |
|
458 $this->_lat = (float) $coordinate; |
|
459 return $this; |
|
460 } |
|
461 |
|
462 /** |
|
463 * Sets weblog longitude coordinate. |
|
464 * |
|
465 * @param float $coordinate |
|
466 * @return Zend_Service_Technorati_Weblog $this instance |
|
467 */ |
|
468 public function setLon($coordinate) |
|
469 { |
|
470 $this->_lon = (float) $coordinate; |
|
471 return $this; |
|
472 } |
|
473 |
|
474 /** |
|
475 * Sets hasPhoto property. |
|
476 * |
|
477 * @param bool $hasPhoto |
|
478 * @return Zend_Service_Technorati_Weblog $this instance |
|
479 */ |
|
480 public function setHasPhoto($hasPhoto) |
|
481 { |
|
482 $this->_hasPhoto = (bool) $hasPhoto; |
|
483 return $this; |
|
484 } |
|
485 |
|
486 } |