Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: .:UND3R:. en 3 Junio 2012, 05:50 am



Título: Problema RSS Facebook
Publicado por: .:UND3R:. en 3 Junio 2012, 05:50 am
Hola a todos tengo el siguiente problema estoy utilizando RSS Reader (un .php que se encarga de mostrar en mi web los RSS que yo desee) funciona todo de maravilla, he podido incluir RSS de los foros SMF sin problema alguno, el problema comienza acá.

Estoy intentando agregar un RSS de Facebook, el problema que tengo es que al configurarlo dentro del php, este no me acepta el carácter &:

https://www.facebook.com/feeds/notifications.php?id=319579974767006&viewer=1074983523&key=AWhjAKL7r9fCfZlH&format=rss20

Por lo que tengo que modificarlo por &amp:, funciona de maravilla el problema está que facebook no me lo permite con el & que acompaña a format:

https://www.facebook.com/feeds/notifications.php?id=319579974767006&amp:viewer=1074983523&amp:key=AWhjAKL7r9fCfZlH&amp:format=rss20

si lo cambio por &amp: ya no me funciona el link, mi pregunta es como podría agregarlo dentro de RSS Reader sin tener que cambiar las "&"?

Gracias


Título: Re: Problema RSS Facebook
Publicado por: dimitrix en 3 Junio 2012, 18:15 pm
A mi:
https://www.facebook.com/feeds/notifications.php?id=319579974767006&viewer=1074983523&key=AWhjAKL7r9fCfZlH&format=rss20

Me lo publica bien y sin problemas :S

De todos modos puedes usar un acortador.


Título: Re: Problema RSS Facebook
Publicado por: .:UND3R:. en 3 Junio 2012, 19:13 pm
Claro que funciona perfectamente, quizás me expresé mal, cuando lo paso al RSS Reader este no me acepta los &, por ende los cambié por &amp: y ahí no me funciona :S


Título: Re: Problema RSS Facebook
Publicado por: ~ Yoya ~ en 3 Junio 2012, 19:35 pm
El problema es con el parse entonce, una buena idea es la de dimitrix, acortar la URL.

También puedes ocupar este parse xD.

index.php
Código
  1. <?php
  2.  
  3. require_once('feed.php');
  4.  
  5. $feed = new FeedComponent();
  6. print_r($feed->parser('https://www.facebook.com/feeds/notifications.php?id=319579974767006&viewer=1074983523&key=AWhjAKL7r9fCfZlH&format=rss20'));

feed.php
Código
  1. <?php
  2.  
  3. class FeedComponent {
  4. protected $URL = NULL;
  5.  
  6.  
  7.  
  8. public function parser($site) {
  9. $result = null; //Variable que retornara el Feed ya parseado
  10. $this->URL = $site;
  11. $source = $this->getSource($this->URL);
  12.  
  13. $xmlSource = new SimpleXMLElement($source, LIBXML_NOCDATA);
  14.  
  15.  
  16. //Detecta si el Feed es tipo Atom...
  17. if(preg_match('/<feed[^>]+>/i', $source)) {
  18. $result = $this->AtomParser($xmlSource);
  19.  
  20. //Detecta si el Feed es tipo RSS...
  21. }elseif(preg_match('/<rss[^>]+>/i', $source)) {
  22. $result = $this->RssParse($xmlSource);
  23. }
  24.  
  25. //Retorno el contenido...
  26. return (empty($result)) ? NULL : $result;
  27.  
  28. }
  29.  
  30.  
  31. //Function para obtener el codigo de fuente de un archivo Feed
  32. protected function getSource($site) {
  33.  
  34. $this-> URL = $site;
  35.  
  36. $ch = curl_init();
  37. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: text/xml'));
  38. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.125 Safari/533.4');
  39. curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com');
  40. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  41. curl_setopt($ch, CURLOPT_URL, $site);
  42. $result = curl_exec($ch);
  43. curl_close($ch);
  44. return $result;
  45. }
  46.  
  47.  
  48.  
  49.  
  50. //Metodo para parsear Feed tipo Atom...
  51. protected function AtomParser($xmlSource) {
  52.  
  53. $temp;
  54.  
  55. foreach($xmlSource->entry as $arts) {
  56. $temp[] = array('titulo' => $arts->title, 'articulo' => $arts->content, 'url' => $arts->link[4]->attributes()->href);
  57.  
  58. }
  59.  
  60. return $temp;
  61.  
  62. }
  63.  
  64.  
  65. //Metodo para parsear Feed tipo RSS
  66. protected function RssParse($xmlSource) {
  67. $temp = null;
  68.  
  69. foreach($xmlSource->channel->item as $arts) {
  70.  
  71. $temp[] = array('titulo' => $arts->title, 'articulo' => $arts->children('content', TRUE), 'url' => $arts->{'link'});
  72.  
  73. }
  74.  
  75. return $temp;
  76.  
  77. }
  78.  
  79.  
  80. }
  81. ?>


Título: Re: Problema RSS Facebook
Publicado por: .:UND3R:. en 6 Junio 2012, 20:42 pm
Hola, me muestra el siguiente error:

Citar
Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\xampp\htdocs\hola\feed.php:13 Stack trace: #0 C:\xampp\htdocs\hola\feed.php(13): SimpleXMLElement->__construct('', 16384) #1 C:\xampp\htdocs\hola\index.php(6): FeedComponent->parser('https://www.fac...') #2 {main} thrown in C:\xampp\htdocs\hola\feed.php on line 13

Saludos


Título: Re: Problema RSS Facebook
Publicado por: .:UND3R:. en 7 Junio 2012, 04:10 am
Encontré un simple "feed reader", lo he probado y funciona genial, ahora al momento de probarlo con facebook sucede lo mismo, queda en blanco:

Código
  1. <?php
  2. //$RSS = new LectorRSS ("http://www.tublogenwordpress.com/blog/feed/rss/");
  3. $RSS = new LectorRSS ("https://www.facebook.com/feeds/notifications.php?id=319579974767006&viewer=1074983523&key=AWhjAKL7r9fCfZlH&format=rss20");
  4. class LectorRSS {
  5. var $url;
  6. var $data;
  7. function LectorRSS ($url){
  8. $this->url;
  9. $this->data = implode ("", file ($url));
  10. }
  11. function obtener_items (){
  12. preg_match_all ("/<item .*>.*<\/item>/xsmUi", $this->data, $matches);
  13. $items = array ();
  14. foreach ($matches[0] as $match){
  15. $items[] = new RssItem ($match);
  16. }
  17. return $items;
  18. }
  19. }
  20. class RssItem {
  21. var $title, $url;
  22. function RssItem ($xml){
  23. $this->populate ($xml);
  24. }
  25. function populate ($xml){
  26. preg_match ("/<title> (.*) <\/title>/xsmUi", $xml, $matches);
  27. $this->title = $matches[1];
  28. preg_match ("/<link> (.*) <\/link>/xsmUi", $xml, $matches);
  29. $this->url = $matches[1];
  30. }
  31. function obtener_titulo (){
  32. return $this->title;
  33. }
  34. function obtener_url (){
  35. return $this->url;
  36. }
  37. }
  38. foreach ($RSS->obtener_items () as $item){
  39. printf ('<a target="_BLANK" href="%s">%s</a><br />',
  40. $item->obtener_url (), $item->obtener_titulo ());
  41. }
  42. ?>

a ver si me iluminan, saludos