Merge pull request #505 from MrPetovan/task/4116-move-twitteroauth-to-composer

Move TwitterOAuth to composer Part 1: Twitter
This commit is contained in:
Michael Vogel 2018-01-28 19:19:03 +01:00 committed by GitHub
commit ffa36da2c9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
49 changed files with 4334 additions and 2563 deletions

View file

@ -2,11 +2,12 @@
/**
* Name: Twitter Connector
* Description: Bidirectional (posting, relaying and reading) connector for Twitter.
* Version: 1.0.4
* Version: 1.1.0
* Author: Tobias Diekershoff <https://f.diekershoff.de/profile/tobias>
* Author: Michael Vogel <https://pirati.ca/profile/heluecht>
* Maintainer: Hypolite Petovan <https://friendica.mrpetovan.com/profile/hypolite>
*
* Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel
* Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel, Hypolite Petovan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -56,9 +57,10 @@
* setting. After this, your user can configure their Twitter account settings
* from "Settings -> Addon Settings".
*
* Requirements: PHP5, curl [Slinky library]
* Requirements: PHP5, curl
*/
use Abraham\TwitterOAuth\TwitterOAuth;
use Friendica\App;
use Friendica\Content\OEmbed;
use Friendica\Content\Text\BBCode;
@ -77,7 +79,12 @@ use Friendica\Model\User;
use Friendica\Object\Image;
use Friendica\Util\Network;
require_once 'boot.php';
require_once 'include/dba.php';
require_once 'include/enotify.php';
require_once 'include/text.php';
require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
define('TWITTER_DEFAULT_POLL_INTERVAL', 5); // given in minutes
@ -146,21 +153,13 @@ function twitter_follow(App $a, &$contact)
$uid = $a->user["uid"];
$ckey = Config::get('twitter', 'consumerkey');
$ckey = Config::get('twitter', 'consumerkey');
$csecret = Config::get('twitter', 'consumersecret');
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
$osecret = PConfig::get($uid, 'twitter', 'oauthsecret');
require_once "addon/twitter/codebird.php";
$cb = \Codebird\Codebird::getInstance();
$cb->setConsumerKey($ckey, $csecret);
$cb->setToken($otoken, $osecret);
$parameters = [];
$parameters["screen_name"] = $nickname;
$user = $cb->friendships_create($parameters);
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
$connection->post('friendships/create', ['screen_name' => $nickname]);
twitter_fetchuser($a, $uid, $nickname);
@ -218,7 +217,6 @@ function twitter_settings_post(App $a, $post)
if (isset($_POST['twitter-pin'])) {
// if the user supplied us with a PIN from Twitter, let the magic of OAuth happen
logger('got a Twitter PIN');
require_once 'library/twitteroauth.php';
$ckey = Config::get('twitter', 'consumerkey');
$csecret = Config::get('twitter', 'consumersecret');
// the token and secret for which the PIN was generated were hidden in the settings
@ -261,10 +259,10 @@ function twitter_settings(App $a, &$s)
* 2) If no OAuthtoken & stuff is present, generate button to get some
* 3) Checkbox for "Send public notices (280 chars only)
*/
$ckey = Config::get('twitter', 'consumerkey' );
$csecret = Config::get('twitter', 'consumersecret' );
$otoken = PConfig::get(local_user(), 'twitter', 'oauthtoken' );
$osecret = PConfig::get(local_user(), 'twitter', 'oauthsecret' );
$ckey = Config::get('twitter', 'consumerkey');
$csecret = Config::get('twitter', 'consumersecret');
$otoken = PConfig::get(local_user(), 'twitter', 'oauthtoken');
$osecret = PConfig::get(local_user(), 'twitter', 'oauthsecret');
$enabled = intval(PConfig::get(local_user(), 'twitter', 'post'));
$defenabled = intval(PConfig::get(local_user(), 'twitter', 'post_by_default'));
@ -299,7 +297,6 @@ function twitter_settings(App $a, &$s)
* which the user can request a PIN to connect the account to a
* account at Twitter.
*/
require_once 'library/twitteroauth.php';
$connection = new TwitterOAuth($ckey, $csecret);
$request_token = $connection->getRequestToken();
$token = $request_token['oauth_token'];
@ -320,7 +317,6 @@ function twitter_settings(App $a, &$s)
* we have an OAuth key / secret pair for the user
* so let's give a chance to disable the postings to Twitter
*/
require_once 'library/twitteroauth.php';
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
$details = $connection->get('account/verify_credentials');
@ -399,11 +395,7 @@ function twitter_action(App $a, $uid, $pid, $action)
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
$osecret = PConfig::get($uid, 'twitter', 'oauthsecret');
require_once "addon/twitter/codebird.php";
$cb = \Codebird\Codebird::getInstance();
$cb->setConsumerKey($ckey, $csecret);
$cb->setToken($otoken, $osecret);
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
$post = ['id' => $pid];
@ -411,13 +403,13 @@ function twitter_action(App $a, $uid, $pid, $action)
switch ($action) {
case "delete":
// To-Do: $result = $cb->statuses_destroy($post);
// To-Do: $result = $connection->post('statuses/destroy', $post);
break;
case "like":
$result = $cb->favorites_create($post);
$result = $connection->post('favorites/create', $post);
break;
case "unlike":
$result = $cb->favorites_destroy($post);
$result = $connection->post('favorites/destroy', $post);
break;
}
logger("twitter_action '" . $action . "' send, result: " . print_r($result, true), LOGGER_DEBUG);
@ -435,7 +427,10 @@ function twitter_post_hook(App $a, &$b)
logger("twitter_post_hook: parameter " . print_r($b, true), LOGGER_DATA);
// Looking if its a reply to a twitter post
if ((substr($b["parent-uri"], 0, 9) != "twitter::") && (substr($b["extid"], 0, 9) != "twitter::") && (substr($b["thr-parent"], 0, 9) != "twitter::")) {
if ((substr($b["parent-uri"], 0, 9) != "twitter::")
&& (substr($b["extid"], 0, 9) != "twitter::")
&& (substr($b["thr-parent"], 0, 9) != "twitter::"))
{
logger("twitter_post_hook: no twitter post " . $b["parent"]);
return;
}
@ -484,10 +479,12 @@ function twitter_post_hook(App $a, &$b)
if ($b['verb'] == ACTIVITY_LIKE) {
logger("twitter_post_hook: parameter 2 " . substr($b["thr-parent"], 9), LOGGER_DEBUG);
if ($b['deleted'])
if ($b['deleted']) {
twitter_action($a, $b["uid"], substr($b["thr-parent"], 9), "unlike");
else
} else {
twitter_action($a, $b["uid"], substr($b["thr-parent"], 9), "like");
}
return;
}
@ -521,9 +518,7 @@ function twitter_post_hook(App $a, &$b)
return;
}
require_once 'library/twitteroauth.php';
require_once 'include/bbcode.php';
$tweet = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
$max_char = 280;
$msgarr = BBCode::toPlaintext($b, $max_char, true, 8);
@ -545,29 +540,16 @@ function twitter_post_hook(App $a, &$b)
// and now tweet it :-)
if (strlen($msg) && ($image != "")) {
$img_str = Network::fetchUrl($image);
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
$media = $connection->upload('media/upload', ['media' => $image]);
$tempfile = tempnam(get_temppath(), "cache");
file_put_contents($tempfile, $img_str);
// Twitter had changed something so that the old library doesn't work anymore
// so we are using a new library for twitter
// To-Do:
// Switching completely to this library with all functions
require_once "addon/twitter/codebird.php";
$cb = \Codebird\Codebird::getInstance();
$cb->setConsumerKey($ckey, $csecret);
$cb->setToken($otoken, $osecret);
$post = ['status' => $msg, 'media[]' => $tempfile];
$post = ['status' => $msg, 'media_ids' => $media->media_id_string];
if ($iscomment) {
$post["in_reply_to_status_id"] = substr($orig_post["uri"], 9);
}
$result = $cb->statuses_updateWithMedia($post);
unlink($tempfile);
$result = $connection->post('statuses/update', $post);
logger('twitter_post_with_media send, result: ' . print_r($result, true), LOGGER_DEBUG);
@ -612,7 +594,7 @@ function twitter_post_hook(App $a, &$b)
$post["in_reply_to_status_id"] = substr($orig_post["uri"], 9);
}
$result = $tweet->post($url, $post);
$result = $connection->post($url, $post);
logger('twitter_post send, result: ' . print_r($result, true), LOGGER_DEBUG);
if ($result->source) {
@ -628,7 +610,7 @@ function twitter_post_hook(App $a, &$b)
}
$s = serialize(['url' => $url, 'item' => $b['id'], 'post' => $post]);
Queue::add($a->contact, NETWORK_TWITTER, $s);
notice(L10n::t('Twitter post failed. Queued for retry.') . EOL);
} elseif ($iscomment) {
@ -644,8 +626,8 @@ function twitter_post_hook(App $a, &$b)
function twitter_addon_admin_post(App $a)
{
$consumerkey = x($_POST, 'consumerkey') ? notags(trim($_POST['consumerkey'])) : '';
$consumersecret = x($_POST, 'consumersecret') ? notags(trim($_POST['consumersecret'])) : '';
$consumerkey = x($_POST, 'consumerkey') ? notags(trim($_POST['consumerkey'])) : '';
$consumersecret = x($_POST, 'consumersecret') ? notags(trim($_POST['consumersecret'])) : '';
Config::set('twitter', 'consumerkey', $consumerkey);
Config::set('twitter', 'consumersecret', $consumersecret);
info(L10n::t('Settings updated.') . EOL);
@ -690,8 +672,9 @@ function twitter_cron(App $a, $b)
}
$abandon_days = intval(Config::get('system', 'account_abandon_days'));
if ($abandon_days < 1)
if ($abandon_days < 1) {
$abandon_days = 0;
}
$abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400);
@ -828,7 +811,14 @@ function twitter_do_mirrorpost(App $a, $uid, $post)
// We don't support nested shares, so we mustn't show quotes as shares on retweets
$item = twitter_createpost($a, $uid, $post->retweeted_status, ['id' => 0], false, false, true);
$datarray['body'] = "\n" . share_header($item['author-name'], $item['author-link'], $item['author-avatar'], "", $item['created'], $item['plink']);
$datarray['body'] = "\n" . share_header(
$item['author-name'],
$item['author-link'],
$item['author-avatar'],
"",
$item['created'],
$item['plink']
);
$datarray['body'] .= $item['body'] . '[/share]';
} else {
@ -871,7 +861,6 @@ function twitter_fetchtimeline(App $a, $uid)
require_once 'include/items.php';
require_once 'mod/share.php';
require_once 'library/twitteroauth.php';
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
$parameters = ["exclude_replies" => true, "trim_user" => false, "contributor_details" => true, "include_rts" => true, "tweet_mode" => "extended"];
@ -954,15 +943,8 @@ function twitter_queue_hook(App $a, &$b)
$z = unserialize($x['content']);
require_once "addon/twitter/codebird.php";
$cb = \Codebird\Codebird::getInstance();
$cb->setConsumerKey($ckey, $csecret);
$cb->setToken($otoken, $osecret);
if ($z['url'] == "statuses/update") {
$result = $cb->statuses_update($z['post']);
}
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
$result = $connection->post($z['url'], $z['post']);
logger('twitter_queue: post result: ' . print_r($result, true), LOGGER_DEBUG);
@ -1010,7 +992,8 @@ function twitter_fetch_contact($uid, $contact, $create_user)
"addr" => $contact->screen_name . "@twitter.com", "generation" => 2]);
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1",
intval($uid), dbesc("twitter::" . $contact->id_str));
intval($uid),
dbesc("twitter::" . $contact->id_str));
if (!count($r) && !$create_user) {
return 0;
@ -1128,17 +1111,11 @@ function twitter_fetch_contact($uid, $contact, $create_user)
function twitter_fetchuser(App $a, $uid, $screen_name = "", $user_id = "")
{
$ckey = Config::get('twitter', 'consumerkey');
$ckey = Config::get('twitter', 'consumerkey');
$csecret = Config::get('twitter', 'consumersecret');
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
$osecret = PConfig::get($uid, 'twitter', 'oauthsecret');
require_once "addon/twitter/codebird.php";
$cb = \Codebird\Codebird::getInstance();
$cb->setConsumerKey($ckey, $csecret);
$cb->setToken($otoken, $osecret);
$r = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
intval($uid));
@ -1159,7 +1136,8 @@ function twitter_fetchuser(App $a, $uid, $screen_name = "", $user_id = "")
}
// Fetching user data
$user = $cb->users_show($parameters);
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
$user = $connection->get('users/show', $parameters);
if (!is_object($user)) {
return;
@ -1395,8 +1373,8 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis
// Don't import our own comments
$r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1",
dbesc($postarray['uri']),
intval($uid)
dbesc($postarray['uri']),
intval($uid)
);
if (count($r)) {
@ -1410,8 +1388,8 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis
$parent = "twitter::" . $post->in_reply_to_status_id_str;
$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($parent),
intval($uid)
dbesc($parent),
intval($uid)
);
if (count($r)) {
$postarray['thr-parent'] = $r[0]["uri"];
@ -1420,8 +1398,8 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis
$postarray['object-type'] = ACTIVITY_OBJ_COMMENT;
} else {
$r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1",
dbesc($parent),
intval($uid)
dbesc($parent),
intval($uid)
);
if (count($r)) {
$postarray['thr-parent'] = $r[0]['uri'];
@ -1542,7 +1520,14 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis
$postarray['body'] = $statustext;
$postarray['body'] .= "\n" . share_header($quoted['author-name'], $quoted['author-link'], $quoted['author-avatar'], "", $quoted['created'], $quoted['plink']);
$postarray['body'] .= "\n" . share_header(
$quoted['author-name'],
$quoted['author-link'],
$quoted['author-avatar'],
"",
$quoted['created'],
$quoted['plink']
);
$postarray['body'] .= $quoted['body'] . '[/share]';
}
@ -1554,7 +1539,7 @@ function twitter_checknotification(App $a, $uid, $own_id, $top_item, $postarray)
{
/// TODO: this whole function doesn't seem to work. Needs complete check
$user = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1",
intval($uid)
intval($uid)
);
if (!count($user)) {
@ -1567,8 +1552,8 @@ function twitter_checknotification(App $a, $uid, $own_id, $top_item, $postarray)
}
$own_user = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1",
intval($uid),
dbesc("twitter::".$own_id)
intval($uid),
dbesc("twitter::".$own_id)
);
if (!count($own_user)) {
@ -1581,8 +1566,8 @@ function twitter_checknotification(App $a, $uid, $own_id, $top_item, $postarray)
}
$myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0",
dbesc($postarray['parent-uri']),
intval($uid)
dbesc($postarray['parent-uri']),
intval($uid)
);
if (count($myconv)) {
@ -1636,8 +1621,8 @@ function twitter_fetchparentposts(App $a, $uid, $post, $connection, $self, $own_
}
$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc("twitter::".$post->id_str),
intval($uid)
dbesc("twitter::".$post->id_str),
intval($uid)
);
if (count($r)) {
@ -1655,8 +1640,9 @@ function twitter_fetchparentposts(App $a, $uid, $post, $connection, $self, $own_
foreach ($posts as $post) {
$postarray = twitter_createpost($a, $uid, $post, $self, false, false, false);
if (trim($postarray['body']) == "")
if (trim($postarray['body']) == "") {
continue;
}
$item = Item::insert($postarray);
$postarray["id"] = $item;
@ -1687,7 +1673,6 @@ function twitter_fetchhometimeline(App $a, $uid)
$application_name = $a->get_hostname();
}
require_once 'library/twitteroauth.php';
require_once 'include/items.php';
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
@ -1849,8 +1834,9 @@ function twitter_fetchhometimeline(App $a, $uid)
$item = $r[0]['id'];
$parent_id = $r[0]['parent'];
}
} else
} else {
$parent_id = $postarray['parent'];
}
if (($item != 0) && !function_exists("check_item_notification")) {
require_once 'include/enotify.php';
@ -1889,8 +1875,6 @@ function twitter_fetch_own_contact(App $a, $uid)
$contact_id = 0;
if ($own_id == "") {
require_once 'library/twitteroauth.php';
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
// Fetching user data
@ -1957,9 +1941,7 @@ function twitter_is_retweet(App $a, $uid, $body)
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
$osecret = PConfig::get($uid, 'twitter', 'oauthsecret');
require_once 'library/twitteroauth.php';
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
$result = $connection->post('statuses/retweet/' . $id);
logger('twitter_is_retweet: result ' . print_r($result, true), LOGGER_DEBUG);