Source of file MyTwitter.php
Size: 6,337 Bytes - Last Modified: 2021-12-23T10:46:26+00:00
/var/www/docs.ssmods.com/process/src/src/Api/MyTwitter.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 | <?php namespace SunnysideUp\ShareThis\Api; use SilverStripe\Control\Director; use SilverStripe\Control\Session; use SilverStripe\Core\Config\Config; use SilverStripe\Core\Injector\Injectable; use SilverStripe\ORM\ArrayList; use SilverStripe\ORM\FieldType\DBDatetime; use SilverStripe\View\ArrayData; /** * @author romain [at] sunnys side up .co.nz + nicolaas [at] sunny side up . co .nz * @inspiration: https://github.com/tylerkidd/silverstripe-twitter-feed/ * @funding: MSO Design (www.msodesign.com) * **/ class MyTwitter { use Injectable; /** * @var boolean */ private static $debug = false; /** * @var array */ private static $singletons = []; /** * @var boolean */ private static $favourites_only = false; /** * @var boolean */ private static $non_replies_only = false; /** * @var string */ private static $twitter_consumer_key = ''; /** * @var string */ private static $twitter_consumer_secret = ''; /** * @var string */ private static $titter_oauth_token = ''; /** * @var string */ private static $titter_oauth_token_secret = ''; /** * @var array */ private static $twitter_config = [ 'include_entities' => 'true', 'include_rts' => 'true', ]; /** * returns a DataObjetSet of the last $count tweets. * - saves twitter feed to dataobject * * @param string $username (e.g. mytwitterhandle) * @param int $count - number of tweets to retrieve at any one time * @return \SilverStripe\ORM\SS_List | Null */ public static function last_statuses($username, $count = 1, $useHourlyCache = true) { if (! $username) { user_error('No username provided'); } $sessionName = "MyTwitterFeeds${username}" . date('Ymdh'); if (Session::get($sessionName) && $useHourlyCache && ! Config::inst()->get(MyTwitter::class, 'debug')) { //do nothing } else { if (empty(self::$singletons[$username])) { self::$singletons[$username] = new MyTwitter($username, $count); } $dataObjectSet = self::$singletons[$username]->TwitterFeed($username, $count); if ($dataObjectSet && $dataObjectSet->count()) { foreach ($dataObjectSet as $tweet) { if (! MyTwitterData::get()->filter(['TwitterID' => $tweet->ID])->count()) { $myTwitterData = new MyTwitterData(); $myTwitterData->TwitterID = $tweet->ID; $myTwitterData->Title = $tweet->Title; $myTwitterData->Date = $tweet->Date; $myTwitterData->write(); } } } Session::set($sessionName, 1); } Config::inst()->update(MyTwitterData::class, 'username', $username); return MyTwitterData::get()->filter(['Hide' => 0])->limit($count); } /** * retries latest tweets from Twitter * * @param string $username (e.g. mytwitterhandle) * @param int $count - number of tweets to retrieve at any one time * @return \SilverStripe\ORM\SS_List | Null */ public function TwitterFeed($username, $count = 5) { if (! $username) { user_error('No username provided'); } Config::inst()->update(MyTwitterData::class, 'username', $username); //check settings are available $requiredSettings = [ 'twitter_consumer_key', 'twitter_consumer_secret', 'titter_oauth_token', 'titter_oauth_token', ]; foreach ($requiredSettings as $setting) { if (! Config::inst()->get(MyTwitter::class, $setting)) { user_error(" you must set MyTwitter::${setting}", E_USER_NOTICE); return null; } } // require_once(Director::baseFolder().'/'.SS_SHARETHIS_DIR.'/third_party/twitter_oauth/TwitterOAuthConsumer.php'); $connection = new TwitterOAuth( Config::inst()->get(MyTwitter::class, 'twitter_consumer_key'), Config::inst()->get(MyTwitter::class, 'twitter_consumer_secret'), Config::inst()->get(MyTwitter::class, 'titter_oauth_token'), Config::inst()->get(MyTwitter::class, 'titter_oauth_token_secret') ); $config = Config::inst()->get(MyTwitter::class, 'twitter_config'); $config['screen_name'] = $username; $tweets = $connection->get('statuses/user_timeline', $config); $tweetList = new ArrayList(); if (count($tweets) > 0 && ! isset($tweets->error)) { $i = 0; foreach ($tweets as $tweet) { if (Config::inst()->get(MyTwitter::class, 'favourites_only') && $tweet->favorite_count === 0) { break; } if (Config::inst()->get(MyTwitter::class, 'non_replies_only') && $tweet->in_reply_to_status_id) { break; } if (Config::inst()->get(MyTwitter::class, 'debug')) { print_r($tweet); } if (++$i > $count) { break; } $date = new DBDatetime(); $date->setValue(strtotime($tweet->created_at)); $text = htmlentities($tweet->text, ENT_NOQUOTES, $encoding = 'UTF-8', $doubleEncode = false); if (! empty($tweet->entities) && ! empty($tweet->entities->urls)) { foreach ($tweet->entities->urls as $url) { if (! empty($url->url) && ! empty($url->display_url)) { $text = str_replace($url->url, '<a href="' . $url->url . '" class="external">' . $url->display_url . '</a>', $text); } } } $tweetList->push( new ArrayData([ 'ID' => $tweet->id_str, 'Title' => $text, 'Date' => $date, ]) ); } } return $tweetList; } } |