TwitterAPI mit PHP abrufen

Hallo zusammen,
wer braucht es nicht… ein Tweet auf seiner eigen Seite oder etwas individueller… aber ohne ein Plugin aus WordPress sondern auf seinem eigenen System.
Mit diesem kleinen Beispiel kann man sich schnell und einfach die Tweets auf seine Webseite holen. Das einzige was gebraucht wird, ist PHP 😉 Ach so noch ein kleiner Hinweis… der Cache wurde eingebaut, weil Twitter bei 1000 aufrufen an die API zu einer TwitterPerson dicht macht und man dann ein Tag keine weiteren Daten bekommen kann. Mit der Datei wird es aktuell nur 1x Stunde angefragt 😉

<?php
/**
 * Created by JetBrains PhpStorm.
 * User: marcfinnern
 * Date: 24.08.12
 * Time: 10:47
 */
class twitter {

    function twitter_api($screenname, $maxItems="3", $cacheTime="60"){
        $url = "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=$screenname&count=$maxItems";

        // Caching
        $cachedatei = "cache/twitter_".$screenname.".txt";
        $cacheTime = time()-($cacheTime*60);

        if (file_exists($cachedatei)){
            if (filemtime($cachedatei)<$cacheTime){
                $daten = file_get_contents($url);
                file_put_contents($cachedatei, $daten);
            }
            else {
                $daten = file_get_contents($cachedatei);
            }
        }
        else {
            $daten = file_get_contents($url);
            file_put_contents($cachedatei, $daten);
        }
        // Caching - End


        $result = json_decode($daten);
        $count = 0;
        echo '<ul id="twitter_api">'."\n";
        foreach($result as $tweet) {
            if($count < $maxItems){

                if($count == 0){
                    $class = "first";
                } else if ($count == ($maxItems-1)) {
                    $class = "last";
                } else {
                    $class = "middle";
                }

                $date = date("d M",strtotime($tweet->created_at));
                $search = array(
                    $tweet->entities->urls[0]->url,
                    "@".$tweet->entities->user_mentions[0]->screen_name,
                    "#".$tweet->entities->hashtags[0]->text

                );
                $replace = array(
                    '<a href="'.$tweet->entities->urls[0]->url.'" target="_blank">'.$tweet->entities->urls[0]->expanded_url.'</a>',
                    '<a href="https://twitter.com/'.$tweet->entities->user_mentions[0]->screen_name.'" target="_blank">@'.$tweet->entities->user_mentions[0]->screen_name.'</a>',
                    '<a href="https://twitter.com/search/'.$tweet->entities->hashtags[0]->text.'" target="_blank">#'.$tweet->entities->hashtags[0]->text.'</a>'
                );


                echo '  <li class="'.$class.'">'."\n";
                echo '      <span class="title"><strong>'.$date." | ".$tweet->user->name.'</strong> <a href="https://twitter.com/'.$tweet->user->screen_name.'" target="_blank">@'.$tweet->user->screen_name.'</a></span>'."\n";
                echo '      <span class="desc">'.str_replace($search,$replace,$tweet->text).'</span>'."\n";
                echo '  </li>'."\n";
            }
            $count++;
        }
        echo "</ul>"."\n";
    }
}

Im weiteren sind dann die Sachen für den Quellcode so zu schreiben.
Hinweiß: Man muss dem Cache-Ordner die Rechte 777 oder 0777 geben, damit die Daten abgelegt werden können.

<?php
/*
* Einladen der Twitter-Class
* Und verfügbar machen in einer Variable
* Defaults: $screenname, $maxItems="3", $cacheTime="60"
*/

require("class/twitter.php");
$tw = new twitter();

# Wiedergabe des tweets (3x + 1 Stunde Cachezeit):
$tw->twitter_api("klickfabrik");

# Wiedergabe von 10 Tweets, 30 Minuten Cachezeit
$tw->twitter_api("klickfabrik","10","30");
?>

Wenn man das ganze auch in WordPress nutzen will, muss man zusätzlich noch folgendes machen, damit es auch in einem z.B. PHP-Widget verfügbar ist:

<?php
/*
* Daten werden unter der function.php im WordPresstheme abgelegt und wie folgt aktiviert
*/
#Zeile 11-70 einfügen (also nur die function)
function twitter_api($screenname, $maxItems="3", $cacheTime="60"){
..
.
}

#diese Zeile unter der function anhängen, damit WordPress damit arbeiten kann.
add_action('twitter_api', 'twitter_api');


/* 
* Caching anpassung für WordPress
* Wird dann im Theme-Ordner abgelegt und gespeichert
* Bitte das alte Caching ersetzen 😉
*/
$wordpressDir = explode("/themes/",get_bloginfo('template_url'));
$wordpressDir = "wp-content/themes/".$wordpressDir&#91;1&#93;."/";
$cachedatei = $wordpressDir."cache/twitter_".$screenname.".txt";
?>

Viel Spaß damit,
euer Marc

SocialMediaBar mit TypoScript

Wer wollte nicht schon immer mal für seine eigene Seite eine SocialMediaBar haben und auf jeder Seite Like’n / Google’n oder Twittern können…
hier mit dem kleinen TypoScript kann man das locker umsetzen.

Konstanten:
baseURL = http://www.domain.ltd/

Setup:
# **
# * socialmediabox
# ********************
lib.field_smb = COA
lib.field_smb {
  10 = TEXT
  10 {
    typolink.parameter.data = getIndpEnv:REQUEST_URI
    typolink.returnLast = url
    wrap (
    <li class="google">
    <div class="g-plusone" data-size="medium" data-href="{$baseURL}|"></div>
    <script type="text/javascript">
      (function() {
        var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
        po.src = 'https://apis.google.com/js/plusone.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
      })();
    </script>
    </li>
    )
  }
  20 = TEXT
  20 {
    typolink.parameter.data = getIndpEnv:REQUEST_URI
    typolink.returnLast = url
    wrap (
    <li class="twitter"><a href="https://twitter.com/share" class="twitter-share-button" data-url="{$baseURL}|" data-size="medium">Tweet</a>
    <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
    </li>
  )
  }
  30 = TEXT
  30 {
    typolink.parameter.data = getIndpEnv:REQUEST_URI
    typolink.returnLast = url
    wrap (
    <li class="facebook"><div class="fb-like" data-href="{$baseURL}|" data-send="false" data-layout="button_count" data-width="450" data-show-faces="false"></div>
    <div id="fb-root"></div>
    <script>(function(d, s, id) {
      var js, fjs = d.getElementsByTagName(s)[0];
      if (d.getElementById(id)) return;
      js = d.createElement(s); js.id = id;
      js.src = "//connect.facebook.net/de_DE/all.js#xfbml=1&appId=459667507386498";
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));</script>
    </li>
    )
  }
 wrap = <ul class="smb">|</ul> 
}

Viel Spaß damit 😉