parent
75d5fbbc70
commit
c0836419b7
|
@ -1,4 +1,4 @@
|
||||||
Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel
|
Copyright (c) 2011-2018 Tobias Diekershoff, Michael Vogel, Hypolite Petovan
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,39 +1,23 @@
|
||||||
Twitter Addon
|
Twitter Addon
|
||||||
==============
|
==============
|
||||||
|
|
||||||
Main authors Tobias Diekershoff and Michael Vogel.
|
Main authors Tobias Diekershoff, Michael Vogel and Hypolite Petovan.
|
||||||
|
|
||||||
With this addon to friendica you can give your users the possibility to post their *public* messages to Twitter and
|
This bi-directional connector addon allows each user to crosspost their Friendica public posts to Twitter, import their
|
||||||
to import their timeline. The messages will be strapped their rich context and shortened to 280 characters length if
|
Twitter timeline, interact with tweets from Friendica, and crosspost to Friendica their public tweets.
|
||||||
necessary.
|
|
||||||
|
|
||||||
The addon can also mirror a users Tweets into the ~friendica wall.
|
## Installation
|
||||||
|
|
||||||
Installation
|
To use this addon you have to register an [application](https://apps.twitter.com/) for your Friendica instance on Twitter.
|
||||||
------------
|
Please leave the field "Callback URL" empty.
|
||||||
|
|
||||||
To use this addon you have to register an [application](https://apps.twitter.com/) for your friendica instance on Twitter. Please leave the field "Callback URL" empty.
|
|
||||||
|
|
||||||
After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/addons/twitter).
|
After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/addons/twitter).
|
||||||
|
|
||||||
Where to find
|
## License
|
||||||
-------------
|
|
||||||
|
|
||||||
In the friendica addon git repository /twitter/, this directory contains
|
The _Twitter Connector_ is licensed under the [3-clause BSD license][2] see the LICENSE file in the addons directory.
|
||||||
all required PHP files (including the [Twitter OAuth library][1] by Abraham
|
|
||||||
Williams, MIT licensed and the [Slinky library][2] by Beau Lebens, BSD license),
|
|
||||||
a CSS file for styling of the user configuration and an image to _Sign in with
|
|
||||||
Twitter_.
|
|
||||||
|
|
||||||
[1]: https://github.com/abraham/twitteroauth
|
|
||||||
[2]: http://dentedreality.com.au/projects/slinky/
|
|
||||||
|
|
||||||
License
|
|
||||||
=======
|
|
||||||
|
|
||||||
The _StatusNet Connector_ is licensed under the [3-clause BSD license][3] see the
|
|
||||||
LICENSE file in the addons directory.
|
|
||||||
|
|
||||||
[3]: http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
|
|
||||||
|
The _Twitter Connector_ uses the [Twitter OAuth library][2] by Abraham Williams, MIT licensed
|
||||||
|
|
||||||
|
[1]: http://opensource.org/licenses/BSD-3-Clause
|
||||||
|
[2]: https://github.com/abraham/twitteroauth
|
||||||
|
|
|
@ -2,11 +2,12 @@
|
||||||
/**
|
/**
|
||||||
* Name: Twitter Connector
|
* Name: Twitter Connector
|
||||||
* Description: Bidirectional (posting, relaying and reading) connector for Twitter.
|
* 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: Tobias Diekershoff <https://f.diekershoff.de/profile/tobias>
|
||||||
* Author: Michael Vogel <https://pirati.ca/profile/heluecht>
|
* 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.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -56,7 +57,7 @@
|
||||||
* setting. After this, your user can configure their Twitter account settings
|
* setting. After this, your user can configure their Twitter account settings
|
||||||
* from "Settings -> Addon Settings".
|
* from "Settings -> Addon Settings".
|
||||||
*
|
*
|
||||||
* Requirements: PHP5, curl [Slinky library]
|
* Requirements: PHP5, curl
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Abraham\TwitterOAuth\TwitterOAuth;
|
use Abraham\TwitterOAuth\TwitterOAuth;
|
||||||
|
@ -425,7 +426,10 @@ function twitter_post_hook(App $a, &$b)
|
||||||
logger("twitter_post_hook: parameter " . print_r($b, true), LOGGER_DATA);
|
logger("twitter_post_hook: parameter " . print_r($b, true), LOGGER_DATA);
|
||||||
|
|
||||||
// Looking if its a reply to a twitter post
|
// 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"]);
|
logger("twitter_post_hook: no twitter post " . $b["parent"]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -474,10 +478,12 @@ function twitter_post_hook(App $a, &$b)
|
||||||
|
|
||||||
if ($b['verb'] == ACTIVITY_LIKE) {
|
if ($b['verb'] == ACTIVITY_LIKE) {
|
||||||
logger("twitter_post_hook: parameter 2 " . substr($b["thr-parent"], 9), LOGGER_DEBUG);
|
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");
|
twitter_action($a, $b["uid"], substr($b["thr-parent"], 9), "unlike");
|
||||||
else
|
} else {
|
||||||
twitter_action($a, $b["uid"], substr($b["thr-parent"], 9), "like");
|
twitter_action($a, $b["uid"], substr($b["thr-parent"], 9), "like");
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -665,8 +671,9 @@ function twitter_cron(App $a, $b)
|
||||||
}
|
}
|
||||||
|
|
||||||
$abandon_days = intval(Config::get('system', 'account_abandon_days'));
|
$abandon_days = intval(Config::get('system', 'account_abandon_days'));
|
||||||
if ($abandon_days < 1)
|
if ($abandon_days < 1) {
|
||||||
$abandon_days = 0;
|
$abandon_days = 0;
|
||||||
|
}
|
||||||
|
|
||||||
$abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400);
|
$abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400);
|
||||||
|
|
||||||
|
@ -803,7 +810,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
|
// 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);
|
$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]';
|
$datarray['body'] .= $item['body'] . '[/share]';
|
||||||
} else {
|
} else {
|
||||||
|
@ -977,7 +991,8 @@ function twitter_fetch_contact($uid, $contact, $create_user)
|
||||||
"addr" => $contact->screen_name . "@twitter.com", "generation" => 2]);
|
"addr" => $contact->screen_name . "@twitter.com", "generation" => 2]);
|
||||||
|
|
||||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1",
|
$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) {
|
if (!count($r) && !$create_user) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1504,7 +1519,14 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis
|
||||||
|
|
||||||
$postarray['body'] = $statustext;
|
$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]';
|
$postarray['body'] .= $quoted['body'] . '[/share]';
|
||||||
}
|
}
|
||||||
|
@ -1617,8 +1639,9 @@ function twitter_fetchparentposts(App $a, $uid, $post, $connection, $self, $own_
|
||||||
foreach ($posts as $post) {
|
foreach ($posts as $post) {
|
||||||
$postarray = twitter_createpost($a, $uid, $post, $self, false, false, false);
|
$postarray = twitter_createpost($a, $uid, $post, $self, false, false, false);
|
||||||
|
|
||||||
if (trim($postarray['body']) == "")
|
if (trim($postarray['body']) == "") {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$item = item_store($postarray);
|
$item = item_store($postarray);
|
||||||
$postarray["id"] = $item;
|
$postarray["id"] = $item;
|
||||||
|
@ -1810,8 +1833,9 @@ function twitter_fetchhometimeline(App $a, $uid)
|
||||||
$item = $r[0]['id'];
|
$item = $r[0]['id'];
|
||||||
$parent_id = $r[0]['parent'];
|
$parent_id = $r[0]['parent'];
|
||||||
}
|
}
|
||||||
} else
|
} else {
|
||||||
$parent_id = $postarray['parent'];
|
$parent_id = $postarray['parent'];
|
||||||
|
}
|
||||||
|
|
||||||
if (($item != 0) && !function_exists("check_item_notification")) {
|
if (($item != 0) && !function_exists("check_item_notification")) {
|
||||||
require_once 'include/enotify.php';
|
require_once 'include/enotify.php';
|
||||||
|
@ -1917,7 +1941,6 @@ function twitter_is_retweet(App $a, $uid, $body)
|
||||||
$osecret = PConfig::get($uid, 'twitter', 'oauthsecret');
|
$osecret = PConfig::get($uid, 'twitter', 'oauthsecret');
|
||||||
|
|
||||||
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
|
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
|
||||||
|
|
||||||
$result = $connection->post('statuses/retweet/' . $id);
|
$result = $connection->post('statuses/retweet/' . $id);
|
||||||
|
|
||||||
logger('twitter_is_retweet: result ' . print_r($result, true), LOGGER_DEBUG);
|
logger('twitter_is_retweet: result ' . print_r($result, true), LOGGER_DEBUG);
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Friendica\Core\Config;
|
use Friendica\Core\Config;
|
||||||
|
|
||||||
function twitter_sync_run($argv, $argc) {
|
function twitter_sync_run($argv, $argc)
|
||||||
|
{
|
||||||
global $a;
|
global $a;
|
||||||
|
|
||||||
require_once("addon/twitter/twitter.php");
|
require_once 'addon/twitter/twitter.php';
|
||||||
|
|
||||||
if (function_exists('sys_getloadavg')) {
|
if (function_exists('sys_getloadavg')) {
|
||||||
$load = sys_getloadavg();
|
$load = sys_getloadavg();
|
||||||
|
@ -27,4 +29,3 @@ function twitter_sync_run($argv, $argc) {
|
||||||
twitter_fetchhometimeline($a, $uid);
|
twitter_fetchhometimeline($a, $uid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
|
||||||
|
|
Loading…
Reference in New Issue