class TweetFetcher in Media entity Twitter 8.2
Same name and namespace in other branches
- 8 src/TweetFetcher.php \Drupal\media_entity_twitter\TweetFetcher
Fetches (and caches) tweet data from Twitter's API.
Hierarchy
- class \Drupal\media_entity_twitter\TweetFetcher implements TweetFetcherInterface
Expanded class hierarchy of TweetFetcher
1 string reference to 'TweetFetcher'
1 service uses TweetFetcher
File
- src/
TweetFetcher.php, line 12
Namespace
Drupal\media_entity_twitterView source
class TweetFetcher implements TweetFetcherInterface {
/**
* The optional cache backend.
*
* @var \Drupal\Core\Cache\CacheBackendInterface
*/
protected $cache;
/**
* The current set of Twitter API credentials.
*
* @var array
*/
protected $credentials = [];
/**
* The current API exchange object.
*
* @var \TwitterAPIExchange
*/
protected $twitter;
/**
* TweetFetcher constructor.
*
* @param \Drupal\Core\Cache\CacheBackendInterface|null $cache
* (optional) A cache bin for storing fetched tweets.
*/
public function __construct(CacheBackendInterface $cache = NULL) {
$this->cache = $cache;
}
/**
* {@inheritdoc}
*/
public function fetchTweet($id) {
// Tweets don't change much, so pull it out of the cache (if we have one)
// if this one has already been fetched.
if ($this->cache && ($cached_tweet = $this->cache
->get($id))) {
return $cached_tweet->data;
}
// Ensure that we have an actual API exchange instance.
if (empty($this->twitter)) {
throw new \UnexpectedValueException('Twitter API exchange has not been initialized; credentials may not have been set yet.');
}
// Query Twitter's API.
$response = $this->twitter
->setGetfield('?id=' . $id . '&tweet_mode=extended')
->buildOAuth('https://api.twitter.com/1.1/statuses/show.json', 'GET')
->performRequest();
if (empty($response)) {
throw new \Exception("Could not retrieve tweet {$id}.");
}
// Handle errors as per https://dev.twitter.com/overview/api/response-codes.
if (!empty($response['errors'])) {
throw new TwitterApiException($response['errors']);
}
$response = Json::decode($response);
// If we have a cache, store the response for future use.
if ($this->cache) {
// Tweets don't change often, so the response should expire from the cache
// on its own in 90 days.
$this->cache
->set($id, $response, time() + 86400 * 90);
}
return $response;
}
/**
* {@inheritdoc}
*/
public function getCredentials() {
return $this->credentials;
}
/**
* {@inheritdoc}
*/
public function setCredentials($consumer_key, $consumer_secret, $oauth_access_token, $oauth_access_token_secret) {
$this->credentials = [
'consumer_key' => $consumer_key,
'consumer_secret' => $consumer_secret,
'oauth_access_token' => $oauth_access_token,
'oauth_access_token_secret' => $oauth_access_token_secret,
];
$this->twitter = new \TwitterAPIExchange($this->credentials);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
TweetFetcher:: |
protected | property | The optional cache backend. | |
TweetFetcher:: |
protected | property | The current set of Twitter API credentials. | |
TweetFetcher:: |
protected | property | The current API exchange object. | |
TweetFetcher:: |
public | function |
Retrieves a tweet by its ID. Overrides TweetFetcherInterface:: |
|
TweetFetcher:: |
public | function |
Returns the current Twitter API credentials. Overrides TweetFetcherInterface:: |
|
TweetFetcher:: |
public | function |
Sets the credentials for accessing Twitter's API. Overrides TweetFetcherInterface:: |
|
TweetFetcher:: |
public | function | TweetFetcher constructor. |