lib_rss.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. // tiré de Shaarli de Seb Sauvage
  3. function small_hash ($txt) {
  4. $t = rtrim (base64_encode (hash ('crc32', $txt, true)), '=');
  5. $t = str_replace ('+', '-', $t); // Get rid of characters which need encoding in URLs.
  6. $t = str_replace ('/', '_', $t);
  7. $t = str_replace ('=', '@', $t);
  8. return $t;
  9. }
  10. function timestamptodate ($t, $hour = true) {
  11. $jour = date ('d', $t);
  12. $mois = date ('m', $t);
  13. $annee = date ('Y', $t);
  14. switch ($mois) {
  15. case 1:
  16. $mois = 'janvier';
  17. break;
  18. case 2:
  19. $mois = 'février';
  20. break;
  21. case 3:
  22. $mois = 'mars';
  23. break;
  24. case 4:
  25. $mois = 'avril';
  26. break;
  27. case 5:
  28. $mois = 'mai';
  29. break;
  30. case 6:
  31. $mois = 'juin';
  32. break;
  33. case 7:
  34. $mois = 'juillet';
  35. break;
  36. case 8:
  37. $mois = 'août';
  38. break;
  39. case 9:
  40. $mois = 'septembre';
  41. break;
  42. case 10:
  43. $mois = 'octobre';
  44. break;
  45. case 11:
  46. $mois = 'novembre';
  47. break;
  48. case 12:
  49. $mois = 'décembre';
  50. break;
  51. }
  52. $date = $jour . ' ' . $mois . ' ' . $annee;
  53. if ($hour) {
  54. return $date . date (' \à H\:i', $t);
  55. } else {
  56. return $date;
  57. }
  58. }
  59. function sortEntriesByDate ($entry1, $entry2) {
  60. return $entry2->date (true) - $entry1->date (true);
  61. }
  62. function sortReverseEntriesByDate ($entry1, $entry2) {
  63. return $entry1->date (true) - $entry2->date (true);
  64. }
  65. function get_domain ($url) {
  66. return parse_url($url, PHP_URL_HOST);
  67. }
  68. function opml_export ($cats) {
  69. $txt = '';
  70. foreach ($cats as $cat) {
  71. $txt .= '<outline text="' . $cat['name'] . '">' . "\n";
  72. foreach ($cat['feeds'] as $feed) {
  73. $txt .= "\t" . '<outline text="' . cleanText ($feed->name ()) . '" type="rss" xmlUrl="' . $feed->url () . '" htmlUrl="' . $feed->website () . '" />' . "\n";
  74. }
  75. $txt .= '</outline>' . "\n";
  76. }
  77. return $txt;
  78. }
  79. function cleanText ($text) {
  80. return preg_replace ('/&[\w]+;/', '', $text);
  81. }
  82. function opml_import ($xml) {
  83. $opml = @simplexml_load_string ($xml);
  84. if (!$opml) {
  85. return array (array (), array ());
  86. }
  87. $categories = array ();
  88. $feeds = array ();
  89. foreach ($opml->body->outline as $outline) {
  90. if (!isset ($outline['xmlUrl'])) {
  91. // Catégorie
  92. $title = '';
  93. if (isset ($outline['text'])) {
  94. $title = (string) $outline['text'];
  95. } elseif (isset ($outline['title'])) {
  96. $title = (string) $outline['title'];
  97. }
  98. if ($title) {
  99. $cat = new Category ($title);
  100. $categories[] = $cat;
  101. $feeds = array_merge ($feeds, getFeedsOutline ($outline, $cat->id ()));
  102. }
  103. } else {
  104. // Flux rss
  105. $feeds[] = getFeed ($outline, '');
  106. }
  107. }
  108. return array ($categories, $feeds);
  109. }
  110. /**
  111. * import all feeds of a given outline tag
  112. */
  113. function getFeedsOutline ($outline, $cat_id) {
  114. $feeds = array ();
  115. foreach ($outline->children () as $child) {
  116. if (isset ($child['xmlUrl'])) {
  117. $feeds[] = getFeed ($child, $cat_id);
  118. } else {
  119. $feeds = array_merge(
  120. $feeds,
  121. getFeedsOutline ($child, $cat_id)
  122. );
  123. }
  124. }
  125. return $feeds;
  126. }
  127. function getFeed ($outline, $cat_id) {
  128. $url = (string) $outline['xmlUrl'];
  129. $feed = new Feed ($url);
  130. $feed->_category ($cat_id);
  131. return $feed;
  132. }