From ca7d448aa568aaa8d9a7abdd3acf4367f015c735 Mon Sep 17 00:00:00 2001 From: Johannes Schwab Date: Sat, 18 Jul 2015 11:03:58 +0200 Subject: [PATCH 1/2] skip duplicate posts when importing hometimeline --- twitter/twitter.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/twitter/twitter.php b/twitter/twitter.php index c87f4a01..41bfdaa7 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1548,9 +1548,15 @@ function twitter_fetchhometimeline($a, $uid) { $otoken = get_pconfig($uid, 'twitter', 'oauthtoken'); $osecret = get_pconfig($uid, 'twitter', 'oauthsecret'); $create_user = get_pconfig($uid, 'twitter', 'create_user'); + $mirror_posts = get_pconfig($uid, 'twitter', 'mirror_posts'); logger("twitter_fetchhometimeline: Fetching for user ".$uid, LOGGER_DEBUG); + $application_name = get_config('twitter', 'application_name'); + + if ($application_name == "") + $application_name = $a->get_hostname(); + require_once('library/twitteroauth.php'); require_once('include/items.php'); @@ -1617,6 +1623,16 @@ function twitter_fetchhometimeline($a, $uid) { if ($first_time) continue; + if (stristr($post->source, $application_name) && $post->user->screen_name == $own_id) { + logger("twitter_fetchhometimeline: Skip previously sended post for user ".$uid, LOGGER_DEBUG); + continue; + } + + if ($mirror_posts && $post->user->screen_name == $own_id && $post->in_reply_to_status_id_str == "") { + logger("twitter_fetchhometimeline: Skip post that will be mirrored for user ".$uid, LOGGER_DEBUG); + continue; + } + $postarray = twitter_createpost($a, $uid, $post, $self, $create_user, true); if (trim($postarray['body']) == "") From 86fcb99536be96132cb384a3d741b75f04f5a42a Mon Sep 17 00:00:00 2001 From: Johannes Schwab Date: Sat, 18 Jul 2015 23:46:27 +0200 Subject: [PATCH 2/2] fetch parent posts --- twitter/twitter.php | 58 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/twitter/twitter.php b/twitter/twitter.php index 41bfdaa7..916e3724 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1542,6 +1542,54 @@ function twitter_checknotification($a, $uid, $own_id, $top_item, $postarray) { } } +function twitter_fetchparentposts($a, $uid, $post, $connection, $self, $own_id) { + logger("twitter_fetchparentposts: Fetching for user ".$uid." and post ".$post->id_str, LOGGER_DEBUG); + + $posts = array(); + + while ($post->in_reply_to_status_id_str != "") { + $parameters = array("trim_user" => false, "id" => $post->in_reply_to_status_id_str); + + $post = $connection->get('statuses/show', $parameters); + + if (!count($post)) { + logger("twitter_fetchparentposts: Can't fetch post ".$parameters->id, LOGGER_DEBUG); + break; + } + + $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + dbesc("twitter::".$post->id_str), + intval($uid) + ); + + if (count($r)) + break; + + $posts[] = $post; + } + + logger("twitter_fetchparentposts: Fetching ".count($posts)." parents", LOGGER_DEBUG); + + $posts = array_reverse($posts); + + if (count($posts)) { + foreach ($posts as $post) { + $postarray = twitter_createpost($a, $uid, $post, $self, false, false); + + if (trim($postarray['body']) == "") + continue; + + $item = item_store($postarray); + $postarray["id"] = $item; + + logger('twitter_fetchparentpost: User '.$self["nick"].' posted parent timeline item '.$item); + + if ($item != 0) + twitter_checknotification($a, $uid, $own_id, $item, $postarray); + } + } +} + function twitter_fetchhometimeline($a, $uid) { $ckey = get_config('twitter', 'consumerkey'); $csecret = get_config('twitter', 'consumersecret'); @@ -1624,15 +1672,18 @@ function twitter_fetchhometimeline($a, $uid) { continue; if (stristr($post->source, $application_name) && $post->user->screen_name == $own_id) { - logger("twitter_fetchhometimeline: Skip previously sended post for user ".$uid, LOGGER_DEBUG); + logger("twitter_fetchhometimeline: Skip previously sended post", LOGGER_DEBUG); continue; } if ($mirror_posts && $post->user->screen_name == $own_id && $post->in_reply_to_status_id_str == "") { - logger("twitter_fetchhometimeline: Skip post that will be mirrored for user ".$uid, LOGGER_DEBUG); + logger("twitter_fetchhometimeline: Skip post that will be mirrored", LOGGER_DEBUG); continue; } + if ($post->in_reply_to_status_id_str != "") + twitter_fetchparentposts($a, $uid, $post, $connection, $self, $own_id); + $postarray = twitter_createpost($a, $uid, $post, $self, $create_user, true); if (trim($postarray['body']) == "") @@ -1677,6 +1728,9 @@ function twitter_fetchhometimeline($a, $uid) { if ($first_time) continue; + if ($post->in_reply_to_status_id_str != "") + twitter_fetchparentposts($a, $uid, $post, $connection, $self, $own_id); + $postarray = twitter_createpost($a, $uid, $post, $self, false, false); if (trim($postarray['body']) == "")