@ -1,5 +1,4 @@
< ? php
use Abraham\TwitterOAuth\TwitterOAuth ;
use IndieWeb\DateFormatter ;
function require_login ( & $app , $redirect = true ) {
@ -235,23 +234,6 @@ $app->get('/review', function() use($app) {
});
$app -> get ( '/twitter' , function () use ( $app ) {
if ( $user = require_login ( $app )) {
$params = $app -> request () -> params ();
$tweet_url = '' ;
if ( array_key_exists ( 'tweet_url' , $params ))
$tweet_url = $params [ 'tweet_url' ];
render ( 'twitter' , array (
'title' => 'Import Tweet' ,
'tweet_url' => $tweet_url ,
'authorizing' => false
));
}
});
$app -> get ( '/repost' , function () use ( $app ) {
if ( $user = require_login ( $app )) {
$params = $app -> request () -> params ();
@ -443,125 +425,14 @@ $app->get('/settings/html-content', function() use($app) {
}
});
$app -> post ( '/twitter/preview' , function () use ( $app ) {
if ( $user = require_login ( $app )) {
$params = $app -> request () -> params ();
if ( $user -> twitter_access_token ) {
$xray_opts [ 'twitter_api_key' ] = Config :: $twitterClientID ;
$xray_opts [ 'twitter_api_secret' ] = Config :: $twitterClientSecret ;
$xray_opts [ 'twitter_access_token' ] = $user -> twitter_access_token ;
$xray_opts [ 'twitter_access_token_secret' ] = $user -> twitter_token_secret ;
}
$tweet_url = $params [ 'tweet_url' ];
// Pass to X-Ray to download all the twitter data in a useful format
$xray = new p3k\XRay ();
$xray -> http = new p3k\HTTP ( 'Quill (' . Config :: $base_url . ')' );
$data = $xray -> parse ( $tweet_url , $xray_opts );
$postdata = tweet_to_micropub_request ( $data [ 'data' ]);
$response = [
'json' => json_encode ( $postdata , JSON_PRETTY_PRINT + JSON_UNESCAPED_SLASHES )
];
$app -> response ()[ 'Content-type' ] = 'application/json' ;
$app -> response () -> body ( json_encode ( $response ));
}
});
$app -> post ( '/twitter' , function () use ( $app ) {
if ( $user = require_login ( $app )) {
$params = $app -> request () -> params ();
if ( $user -> twitter_access_token ) {
$xray_opts [ 'twitter_api_key' ] = Config :: $twitterClientID ;
$xray_opts [ 'twitter_api_secret' ] = Config :: $twitterClientSecret ;
$xray_opts [ 'twitter_access_token' ] = $user -> twitter_access_token ;
$xray_opts [ 'twitter_access_token_secret' ] = $user -> twitter_token_secret ;
}
$tweet_url = $params [ 'tweet_url' ];
// Pass to X-Ray to download all the twitter data in a useful format
$xray = new p3k\XRay ();
$xray -> http = new p3k\HTTP ( 'Quill (' . Config :: $base_url . ')' );
$data = $xray -> parse ( $tweet_url , $xray_opts );
$location = null ;
if ( isset ( $data [ 'data' ]) && $data [ 'data' ][ 'type' ] == 'entry' ) {
$tweet = $data [ 'data' ];
$postdata = tweet_to_micropub_request ( $tweet );
$r = micropub_post_for_user ( $user , $postdata , null , true );
$app -> response ()[ 'Content-type' ] = 'application/json' ;
$app -> response () -> body ( json_encode ([
'location' => ( isset ( $r [ 'location' ]) && $r [ 'location' ] ? Mf2\resolveUrl ( $user -> micropub_endpoint , $r [ 'location' ]) : null ),
'error' => $r [ 'error' ],
'response' => $r [ 'response' ]
]));
} else {
$app -> response ()[ 'Content-type' ] = 'application/json' ;
$app -> response () -> body ( json_encode ([
'location' => null ,
'error' => 'Error fetching tweet' ,
]));
}
}
});
function tweet_to_micropub_request ( $tweet ) {
// Convert to a micropub post
$postdata = [
'type' => [ 'h-entry' ],
'properties' => [
'content' => [ $tweet [ 'content' ][ 'text' ]],
'published' => [ $tweet [ 'published' ]],
'syndication' => [ $tweet [ 'url' ]],
]
];
if ( isset ( $tweet [ 'in-reply-to' ]))
$postdata [ 'properties' ][ 'in-reply-to' ] = $tweet [ 'in-reply-to' ];
if ( isset ( $tweet [ 'category' ]))
$postdata [ 'properties' ][ 'category' ] = $tweet [ 'category' ];
if ( isset ( $tweet [ 'photo' ]))
$postdata [ 'properties' ][ 'photo' ] = $tweet [ 'photo' ];
if ( isset ( $tweet [ 'video' ]))
$postdata [ 'properties' ][ 'video' ] = $tweet [ 'video' ];
return $postdata ;
}
function create_favorite ( & $user , $url ) {
$tweet_id = false ;
$twitter_syndication = false ;
// POSSE favorites to Twitter
if ( $user -> twitter_access_token && preg_match ( '/https?:\/\/(?:www\.)?twitter\.com\/[^\/]+\/status(?:es)?\/(\d+)/' , $url , $match )) {
$tweet_id = $match [ 1 ];
$twitter = new TwitterOAuth ( Config :: $twitterClientID , Config :: $twitterClientSecret ,
$user -> twitter_access_token , $user -> twitter_token_secret );
$result = $twitter -> post ( 'favorites/create' , array (
'id' => $tweet_id
));
if ( property_exists ( $result , 'id_str' )) {
$twitter_syndication = 'https://twitter.com/' . $user -> twitter_username . '/status/' . $result -> id_str ;
}
}
$micropub_request = array (
'like-of' => $url
);
if ( $twitter_syndication ) {
$micropub_request [ 'syndication' ] = $twitter_syndication ;
}
$r = micropub_post_for_user ( $user , $micropub_request );
return $r ;
@ -581,25 +452,9 @@ function edit_favorite(&$user, $post_url, $like_of) {
function create_repost ( & $user , $url ) {
$tweet_id = false ;
$twitter_syndication = false ;
if ( $user -> twitter_access_token && preg_match ( '/https?:\/\/(?:www\.)?twitter\.com\/[^\/]+\/status(?:es)?\/(\d+)/' , $url , $match )) {
$tweet_id = $match [ 1 ];
$twitter = new TwitterOAuth ( Config :: $twitterClientID , Config :: $twitterClientSecret ,
$user -> twitter_access_token , $user -> twitter_token_secret );
$result = $twitter -> post ( 'statuses/retweet/' . $tweet_id );
if ( property_exists ( $result , 'id_str' )) {
$twitter_syndication = 'https://twitter.com/' . $user -> twitter_username . '/status/' . $result -> id_str ;
}
}
$micropub_request = array (
'repost-of' => $url
);
if ( $twitter_syndication ) {
$micropub_request [ 'syndication' ] = $twitter_syndication ;
}
$r = micropub_post_for_user ( $user , $micropub_request );
return $r ;
@ -795,29 +650,10 @@ $app->get('/reply/preview', function() use($app) {
$reply_url = trim ( $params [ 'url' ]);
if ( preg_match ( '/twtr\.io\/([0-9a-z]+)/i' , $reply_url , $match )) {
$twtr = 'https://twitter.com/_/status/' . sxg_to_num ( $match [ 1 ]);
$ch = curl_init ( $twtr );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , true );
curl_exec ( $ch );
$expanded_url = curl_getinfo ( $ch , CURLINFO_EFFECTIVE_URL );
if ( $expanded_url ) $reply_url = $expanded_url ;
}
$entry = false ;
$xray_opts = [];
if ( preg_match ( '/twitter\.com\/(?:[^\/]+)\/statuse?s?\/(.+)/' , $reply_url , $match )) {
if ( $user -> twitter_access_token ) {
$xray_opts [ 'twitter_api_key' ] = Config :: $twitterClientID ;
$xray_opts [ 'twitter_api_secret' ] = Config :: $twitterClientSecret ;
$xray_opts [ 'twitter_access_token' ] = $user -> twitter_access_token ;
$xray_opts [ 'twitter_access_token_secret' ] = $user -> twitter_token_secret ;
}
}
// Pass to X-Ray to see if it can expand the entry
$xray = new p3k\XRay ();
$xray -> http = new p3k\HTTP ( 'Quill (' . Config :: $base_url . ')' );
@ -870,7 +706,7 @@ $app->get('/reply/preview', function() use($app) {
if ( isset ( $entry [ 'content' ]) && $entry [ 'content' ] && isset ( $entry [ 'content' ][ 'text' ])) {
if ( preg_match_all ( '/(^|(?<=[\s\/]))@([a-z0-9_]+([a-z0-9_\.]*)?)/i' , $entry [ 'content' ][ 'text' ], $matches )) {
foreach ( $matches [ 0 ] as $nick ) {
if ( trim ( $nick , '@' ) != $user -> twitter_username && trim ( $nick , '@' ) != display_url ( $user -> url ))
if ( trim ( $nick , '@' ) != display_url ( $user -> url ))
$mentions [] = strtolower ( trim ( $nick , '@' ));
}
}
@ -884,12 +720,6 @@ $app->get('/reply/preview', function() use($app) {
foreach ( $entry [ 'syndication' ] as $s ) {
$host = parse_url ( $s , PHP_URL_HOST );
switch ( $host ) {
case 'twitter.com' :
case 'www.twitter.com' :
$icon = 'twitter.ico' ; break ;
case 'facebook.com' :
case 'www.facebook.com' :
$icon = 'facebook.ico' ; break ;
case 'github.com' :
case 'www.github.com' :
$icon = 'github.ico' ; break ;