login  Naam:   Wachtwoord: 
Registreer je!
 Forum

twitterfeeder met preg_replace werkt niet goed

Offline GroundZero - 29/03/2012 18:00
Avatar van GroundZeroLid Beste,

mijn twitter script werkt perfect, maar ik wil een SPAN om de links heen plaatsen en dat gaat verkeerd!

[quote]<p>Dit is mijn tweet tekst <span class="tweetlink"><a href="http://t.co/fE6xquba">http://t.co/fE6xquba</a></p>[quote]

Dat is wat hij doet. Hij zet de class dus netjes VOOR de link maar achter de link plaatst hij geen </span> tag om de een of andere vreemde reden.

Kan iemand mij vertellen wat ik verkeerd doe? Mijn twitter code hier:

  1. <?php
  2. function display_latest_tweets($twitter_user_id, $cache_file = 'twitter.txt', $tweets_to_display = 5, $ignore_replies = false, $date_format = 'g:i A M jS', $twitter_style_dates = true)
  3. {
  4. // Seconds to cache feed (1 hour).
  5. $cachetime = 60*60;
  6. // Time that the cache was last filled.
  7. $cache_file_created = ((@file_exists($cache_file))) ? @filemtime($cache_file) : 0;
  8.  
  9. // A flag so we know if the feed was successfully parsed.
  10. $tweet_found = false;
  11.  
  12. // Show file from cache if still valid.
  13. if (time() - $cachetime < $cache_file_created)
  14. {
  15. $tweet_found = true;
  16. // Display tweets from the cache.
  17. @readfile($cache_file);
  18. }
  19. else
  20. {
  21. // Cache file not found, or old. Fetch the RSS feed from Twitter.
  22. $rss = @file_get_contents('http://twitter.com/statuses/user_timeline/'.$twitter_user_id.'.rss');
  23.  
  24. if($rss)
  25. {
  26. // Parse the RSS feed to an XML object.
  27. $xml = @simplexml_load_string($rss);
  28.  
  29. if($xml !== false)
  30. {
  31.  
  32. // Error check: Make sure there is at least one item.
  33. if (count($xml->channel->item))
  34. {
  35. $tweet_count = 0;
  36.  
  37. // Start output buffering.
  38.  
  39. // Iterate over tweets.
  40. foreach($xml->channel->item as $tweet)
  41. {
  42. // Twitter feeds begin with the username, "e.g. User name: Blah"
  43. // so we need to strip that from the front of our tweet.
  44. $tweet_desc = substr($tweet->description,strpos($tweet->description,":")+2);
  45. $tweet_desc = htmlspecialchars($tweet_desc);
  46. $tweet_first_char = substr($tweet_desc,0,1);
  47.  
  48. // If we are not gnoring replies, or tweet is not a reply, process it.
  49. if ($tweet_first_char!='@' || $ignore_replies==false){
  50.  
  51. $tweet_found = true;
  52. $tweet_count++;
  53.  
  54. // Add hyperlink html tags to any urls, twitter ids or hashtags in the tweet.
  55. $tweet_desc = preg_replace('/(https?:\/\/[^\s"<>]+)/','<a href="$1">$1</a>',$tweet_desc);
  56. $tweet_desc = preg_replace('/(^|[\n\s])@([^\s"\t\n\r<:]*)/is', '$1<a href="http://twitter.com/$2">@$2</a>', $tweet_desc);
  57. $tweet_desc = preg_replace('/(^|[\n\s])#([^\s"\t\n\r<:]*)/is', '$1<a href="http://twitter.com/search?q=%23$2">#$2</a>', $tweet_desc);
  58.  
  59. // Convert Tweet display time to a UNIX timestamp. Twitter timestamps are in UTC/GMT time.
  60. $tweet_time = strtotime($tweet->pubDate);
  61. if ($twitter_style_dates)
  62. {
  63. // Current UNIX timestamp.
  64. $current_time = time();
  65. $time_diff = abs($current_time - $tweet_time);
  66. switch ($time_diff)
  67. {
  68. case ($time_diff < 60):
  69. $display_time = $time_diff.' seconds ago';
  70. break;
  71. case ($time_diff >= 60 && $time_diff < 3600):
  72. $min = floor($time_diff/60);
  73. $display_time = $min.' minutes ago';
  74. break;
  75. case ($time_diff >= 3600 && $time_diff < 86400):
  76. $hour = floor($time_diff/3600);
  77. $display_time = 'about '.$hour.' hour';
  78. if ($hour > 1){ $display_time .= 's'; }
  79. $display_time .= ' ago';
  80. break;
  81. default:
  82. $display_time = date($date_format,$tweet_time);
  83. break;
  84. }
  85. }
  86. else
  87. {
  88. $display_time = date($date_format,$tweet_time);
  89. }
  90.  
  91. // Render the tweet. Here you can define styles.
  92. $twitter_html .= '<p>'.$tweet_desc.'</p>';
  93.  
  94. }
  95. // If we have processed enough tweets, stop.
  96. if ($tweet_count >= $tweets_to_display)
  97. {
  98. break;
  99. }
  100.  
  101. }
  102.  
  103. $temp = $twitter_html;
  104. $temp = preg_replace('/<a href="(.*)">(.*)<\/a>/i', '<span class="tweetlink"><a href="$1">$2</a><\/span>', $temp);
  105.  
  106. echo $temp;
  107.  
  108. // Generate a new cache file.
  109. $file = @fopen($cache_file, 'w');
  110.  
  111. // Save the contents of output buffer to the file, and flush the buffer.
  112. @fwrite($file, ob_get_contents());
  113. @fclose($file);
  114.  
  115. }
  116. }
  117. }
  118. }
  119.  
  120. // In case the RSS feed did not parse or load correctly, show this message
  121. if (!$tweet_found)
  122. {
  123. echo '<p>No updates were found</p>';
  124. }
  125. }
  126.  
  127. display_latest_tweets('HIER_JE_TWITTER_NAAM');
  128. ?>

7 antwoorden

Gesponsorde links
Offline vinTage - 29/03/2012 22:12
Avatar van vinTage Nieuw lid en zo:

  1. $temp = preg_replace('/<a href="(.*)">(.*)<\/a>/i', '<span class="tweetlink"><a href="$1">$2</a></span>', $temp);


Offline GroundZero - 29/03/2012 22:56 (laatste wijziging 29/03/2012 22:57)
Avatar van GroundZero Lid Ga ik NU proberen, maar wat heb je veranderd? 

EDIT:

Nope nog steeds niks 
Offline vinTage - 29/03/2012 22:59 (laatste wijziging 29/03/2012 23:04)
Avatar van vinTage Nieuw lid ik had een slash weggehaald <\/span> want de replacement is geen regex 

huh, hij zet er dus wel een span voor, maar niet erachter....vaagheid ftw..
moeilijk om te geloven hoor 

edit nogwat:
werkt perfect hoor...

  1. <?php
  2. $temp = '<a href="abc.com">abc</a>';
  3. $temp = preg_replace('/<a href="(.*)">(.*)<\/a>/i', '<span class="tweetlink"><a href="$1">$2</a></span>', $temp);
  4. echo $temp;
  5. ?>

Offline GroundZero - 29/03/2012 23:05 (laatste wijziging 29/03/2012 23:11)
Avatar van GroundZero Lid serieus haha en die slash had ik zelf ook al gezien haha maar ook met die foutieve slash zou hij toch iets er achter moeten zetten maar doet hij niet 

  1. $temp = $twitter_html;
  2. $temp = preg_replace('/<a href="(.*)">(.*)<\/a>/i', '<span class="tweetlink"><a href="$1">$2</a></span>', $temp);


Dat is wat ik nu heb. De output is het volgende:

  1. <p>blaat bericht <span class="tweetlink"><a href="http://t.co/sdfsdf">http://t.co/sdfsdf</a></p><p>blaat meer!!! <a href="http://t.co/sdfsdf">http://t.co/sdfsdf</a></p>


en dat terwijl alles in één string staat zeg maar (zie lange code 1e post).
Dus hij voegt één keer een span toe als open tag, en erna nergens meer een sluit tag 

EDIT:
Ik zie wat er fout gaat, ik update deze post binnen een paar minuten

EDIT:
Hij doet het volgende:


Citaat:
Dit is mijn eerste tweet

Dit is mijn tweede tweet met een link [@@]http://t.co/sdsdfsdf

Dit is mijn derde tweet met een link http://t.co/iQW3qS7v

Dit is mijn vierde tweet met een link http://t.co/bVmomMOF

Dit is mijn vijfde tweet met een link http://t.co/breVnOki[@@]



Zoals je ziet zet hij iets VOOR de 1e link en achter de LAATSTE link in plaats van dat hij dit bij ELKE link doet... mijn code klopt dus niet...

Enig idee hoe te fixen?

  1. $temp = $twitter_html;
  2. $temp = preg_replace('/<a href="(.*)">(.*)<\/a>/i', '[@@]<a href="$1">$2</a>[@@]', $temp);
Offline vinTage - 29/03/2012 23:23
Avatar van vinTage Nieuw lid
  1. // Add hyperlink html tags to any urls, twitter ids or hashtags in the tweet.
  2. $tweet_desc = preg_replace('/(https?:\/\/[^\s"<>]+)/','<span class="tweetlink"><a href="$1">$1</a></span>',$tweet_desc);
  3. $tweet_desc = preg_replace('/(^|[\n\s])@([^\s"\t\n\r<:]*)/is', '$1<span class="tweetlink"><a href="http://twitter.com/$2">@$2</a></span>', $tweet_desc);
  4. $tweet_desc = preg_replace('/(^|[\n\s])#([^\s"\t\n\r<:]*)/is', '$1<span class="tweetlink"><a href="http://twitter.com/search?q=%23$2">#$2</a></span>', $tweet_desc);
Bedankt door: GroundZero
Offline GroundZero - 29/03/2012 23:25
Avatar van GroundZero Lid Thanks zal eens kijken, vind alleen raar dat ik het zelf niet kon doen :S
Offline vinTage - 29/03/2012 23:31
Avatar van vinTage Nieuw lid Je moet wel de cache wegpleuren na ieder testje he..(twitter.txt)
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.241s