all repos — keyring-reactions-importer @ e894933928cf77c74644bb5f38a3d57f150f037d

adding facebook
Peter Molnar hello@petermolnar.eu
Fri, 13 Mar 2015 22:41:19 +0000
commit

e894933928cf77c74644bb5f38a3d57f150f037d

parent

6e9342aec244e30ceef333712423e551f07a1355

M importers/keyring-reactions-500px.phpimporters/keyring-reactions-500px.php

@@ -74,7 +74,7 @@ 'keyring-500px-reactions-missing-syndication-url',

__( 'Missing syndication URL.', 'keyring') ); - $photo_id = end((explode('/', rtrim($syndication_url, '/')))); + $photo_id = trim(end((explode('/', rtrim($syndication_url, '/'))))); if (empty($photo_id)) return new Keyring_Error( 'keyring-500px-reactions-photo-id-not-found',

@@ -100,7 +100,7 @@ function get_votes ( &$post_id, &$photo_id ) {

$baseurl = sprintf("https://api.500px.com/v1/photos/%s/votes", $photo_id); $res = $this->request ( $baseurl, 'users' ); - $tpl = __( '<a href="%s" rel="nofollow">%s</a> likes this photo on <a href="https://500px.com" rel="nofollow">500px.com</a>','keyring'); + $tpl = __( '<a href="%s" rel="nofollow">%s</a> liked this photo on <a href="https://500px.com" rel="nofollow">500px.com</a>','keyring'); $this->parser_fav_vote ( $post_id, $res, 'votes', $tpl );
A importers/keyring-reactions-facebook.php

@@ -0,0 +1,244 @@

+<?php + +// a horrible hack borrowed from Beau Lebens +function Keyring_Facebook_Reactions() { + +class Keyring_Facebook_Reactions extends Keyring_Reactions_Base { + const SLUG = 'facebook_reactions'; + const LABEL = 'Facebook - comments, likes and re-shares'; + const KEYRING_SERVICE = 'Keyring_Service_Facebook'; + const KEYRING_NAME = 'facebook'; + const REQUESTS_PER_LOAD = 3; // How many remote requests should be made before reloading the page? + const NUM_PER_REQUEST = 100; // Number of images per request to ask for + + const SILONAME = 'facebook.com'; + + const GRAPHAPI = '2.2'; + + function __construct() { + $this->methods = array ( + // method name => comment type + 'likes' => 'like', + 'comments' => 'comment', + //'shares' => 'share' + ); + + //$this->methods = array ('votes', 'favs', 'comments'); + parent::__construct(); + } + + /** + * Accept the form submission of the Options page and handle all of the values there. + * You'll need to validate/santize things, and probably store options in the DB. When you're + * done, set $this->step = 'import' to continue, or 'options' to show the options form again. + */ + function handle_request_options() { + $bools = array('auto_import','auto_approve'); + + foreach ( $bools as $bool ) { + if ( isset( $_POST[$bool] ) ) + $_POST[$bool] = true; + else + $_POST[$bool] = false; + } + + // If there were errors, output them, otherwise store options and start importing + if ( count( $this->errors ) ) { + $this->step = 'greet'; + } else { + $this->set_option( array( + 'auto_import' => (bool) $_POST['auto_import'], + 'auto_approve' => (bool) $_POST['auto_approve'], + ) ); + + $this->step = 'import'; + } + } + + + function make_all_requests( $method, $post ) { + extract($post); + + if (empty($post_id)) + return new Keyring_Error( + 'keyring-facebook-reactions-missing-post-id', + __( 'Missing post ID to make request for.', 'keyring') + ); + + if (empty($syndication_url)) + return new Keyring_Error( + 'keyring-facebook-reactions-missing-syndication-url', + __( 'Missing syndication URL.', 'keyring') + ); + + $photo_id = trim(end((explode('/', rtrim($syndication_url, '/'))))); + if (empty($photo_id)) + return new Keyring_Error( + 'keyring-facebook-reactions-photo-id-not-found', + __( 'Cannot get photo ID out of syndication URL.', 'keyring' ) + ); + + $func = 'get_' . $method; + if ( !method_exists( $this, $func ) ) + return new Keyring_Error( + 'keyring-facebook-reactions-missing-func', + sprintf(__( 'Function is missing for this method (%s), cannot proceed!', 'keyring'), $method) + ); + + return $this->$func ( $post_id, $photo_id ); + } + + /** + * FAVS + */ + + function get_likes ( $post_id, $fb_id ) { + $res = array(); + $baseurl = sprintf( "https://graph.facebook.com/v%s/%s/likes?", static::GRAPHAPI, $fb_id ); + + $params = array( + 'access_token' => $this->service->token->token, + 'limit' => static::NUM_PER_REQUEST, + ); + + $starturl = $baseurl . http_build_query( $params ); + $results = $this->query($starturl); + + if ($results && is_array($results) && !empty($results)) { + + $auto = ( $this->get_option( 'auto_approve' ) == 1 ) ? 1 : 0; + $type = $this->methods[ 'likes' ]; + + foreach ( $results as $element ) { + + $avatar = sprintf('https://graph.facebook.com/%s/picture', $element->id ); + $author_url = 'https://facebook.com/' . $element->id; + $name = $element->name; + $tpl = __( '<a href="%s" rel="nofollow">%s</a> liked this entry on <a href="https://facebook.com" rel="nofollow">facebook</a>','keyring'); + + $c = array ( + 'comment_author' => $name, + 'comment_author_url' => $author_url, + 'comment_author_email' => $element->id . '@' . static::SILONAME, + 'comment_post_ID' => $post_id, + 'comment_type' => $type, + // DON'T set the date unless it's provided - not with favs & votes + //'comment_date' => date("Y-m-d H:i:s"), + //'comment_date_gmt' => date("Y-m-d H:i:s"), + 'comment_agent' => get_class($this), + 'comment_approved' => $auto, + 'comment_content' => sprintf( $tpl, $author_url, $name ), + ); + + $this->insert_comment($post_id, $c, $element, $avatar); + } + } + + } + + + /** + * comments + */ + + function get_comments ( $post_id, $fb_id ) { + $res = array(); + $baseurl = sprintf( "https://graph.facebook.com/v%s/%s/comments?", static::GRAPHAPI, $fb_id ); + + $params = array( + 'access_token' => $this->service->token->token, + 'limit' => static::NUM_PER_REQUEST, + ); + + $starturl = $baseurl . http_build_query( $params ); + $results = $this->query($starturl); + + if ($results && is_array($results) && !empty($results)) { + + $auto = ( $this->get_option( 'auto_approve' ) == 1 ) ? 1 : 0; + $type = $this->methods[ 'comments' ]; + + foreach ( $results as $element ) { + $ctime = strtotime($element->created_time); + $author_url = 'https://facebook.com/' . $element->from->id; + $name = $element->from->name; + $avatar = sprintf('https://graph.facebook.com/%s/picture/?width=%s&height=%s', $element->from->id, get_option( 'thumbnail_size_w' ), get_option( 'thumbnail_size_h' )); + + $message = $element->message; + if ( isset($element->message_tags) && !empty($element->message_tags) && is_array($element->message_tags) ) { + foreach ( $element->message_tags as $tag ) { + $message = str_replace( $tag->name, sprintf('<a href="https://facebook.com/%s">%s</a>' , $tag->id, $tag->name), $message); + } + } + + $c = array ( + 'comment_author' => $name, + 'comment_author_url' => $author_url, + 'comment_author_email' => $element->from->id . '@' . static::SILONAME, + 'comment_post_ID' => $post_id, + 'comment_type' => $type, + 'comment_date' => date("Y-m-d H:i:s", $ctime), + 'comment_date_gmt' => date("Y-m-d H:i:s", $ctime), + 'comment_agent' => get_class($this), + 'comment_approved' => $auto, + 'comment_content' => $message, + ); + + $this->insert_comment($post_id, $c, $element, $avatar); + } + } + } + + /** + * + */ + function query ( $starturl ) { + + $nexurl = false; + $finished = false; + $res = array(); + + if (empty($starturl)) + return false; + + while (!$finished) { + + if (empty($nexturl) or !filter_var($nexturl, FILTER_VALIDATE_URL) ) { + $url = $starturl; + } + else { + $url = $nexturl; + } + + $data = $this->service->request( $url, array( 'method' => $this->request_method, 'timeout' => 10 ) ); + + if ( Keyring_Util::is_error( $data ) ) + return ($data); + + if (!empty($data->data)) + foreach ($data->data as $element ) + $res[] = $element; + + // jump to the next url or finish + if (isset($data->paging->next) && filter_var($data->paging->next, FILTER_VALIDATE_URL) ) + $nexturl = $data->paging->next; + else + $finished = true; + } + + return $res; + } + + +}} + + +add_action( 'init', function() { + Keyring_Facebook_Reactions(); // Load the class code from above + keyring_register_reactions( + Keyring_Facebook_Reactions::SLUG, + 'Keyring_Facebook_Reactions', + plugin_basename( __FILE__ ), + __( 'Import comments, likes and re-shares from Facebook as comments for your syndicated posts.', 'keyring' ) + ); +} );
M importers/keyring-reactions-flickr.phpimporters/keyring-reactions-flickr.php

@@ -68,7 +68,7 @@ 'keyring-flickr-reactions-missing-syndication-url',

__( 'Missing syndication URL.', 'keyring') ); - $photo_id = end((explode('/', rtrim($syndication_url, '/')))); + $photo_id = trim(end((explode('/', rtrim($syndication_url, '/'))))); if (empty($photo_id)) return new Keyring_Error( 'keyring-flickr-reactions-photo-id-not-found',
M keyring-reactions-importer.phpkeyring-reactions-importer.php

@@ -118,8 +118,9 @@ $this->service->set_token( $token );

} // Make sure we have a scheduled job to handle auto-imports if enabled + // but delay it for good reasons if ( $this->get_option( 'auto_import' ) && !wp_get_schedule( $this->schedule ) ) - wp_schedule_event( time(), static::SCHEDULE, $this->schedule ); + wp_schedule_event( time() + static::SCHEDULETIME, static::SCHEDULE, $this->schedule ); // jump to the first worker $this->handle_request();

@@ -186,7 +187,6 @@ public static function get_avatar($avatar, $id_or_email, $size, $default = '', $alt = '') {

if (!is_object($id_or_email) || !isset($id_or_email->comment_type)) return $avatar; - // check if comment has an avatar $c_avatar = get_comment_meta($id_or_email->comment_ID, 'avatar', true);

@@ -198,7 +198,7 @@ $safe_alt = '';

else $safe_alt = esc_attr($alt); - return sprintf( '<img alt="%s" src="%s" class="avatar avatar-%s photo u-photo" />', $safe_alt, $c_avatar, $size ); + return sprintf( '<img alt="%s" src="%s" class="avatar photo u-photo" style="width: %spx; height: %spx;" />', $safe_alt, $c_avatar, $size, $size ); } /**

@@ -266,8 +266,10 @@ */

protected function set_option( $name, $val = null ) { if ( is_array( $name ) ) $this->options = array_merge( (array) $this->options, $name ); - else if ( is_null( $name ) && is_null( $val ) ) // $name = null to reset all options + else if ( is_null( $name ) && is_null( $val ) ) { // $name = null to reset all options $this->options = array(); + wp_unschedule_event( time(), $this->schedule ); + } else if ( is_null( $val ) && isset( $this->options[ $name ] ) ) unset( $this->options[ $name ] ); else

@@ -814,7 +816,7 @@ */

function done() { $this->header(); echo '<h2>' . __( 'All done!', 'keyring' ) . '</h2>'; - echo '<h3>' . sprintf( __( '<a href="%s">Check out all your new comments</a>.', 'keyring' ), admin_url( 'comments.php' ) ) . '</h3>'; + echo '<h3>' . sprintf( __( '<a href="%s">Check out all your new comments</a>.', 'keyring' ), admin_url( 'edit-comments.php' ) ) . '</h3>'; $this->footer(); $this->cleanup(); do_action( 'import_done', $this->optname );

@@ -887,6 +889,8 @@ * @param string &$avatar Avatar string to be stored as comment meta

* */ function insert_comment ( &$post_id, &$comment, &$raw, &$avatar = '' ) { + + $comment_id = false; //test if we already have this imported $args = array(
M readme.txtreadme.txt

@@ -1,6 +1,6 @@

=== Keyring Reactions Importer === Contributors: cadeyrn -Tags: flickr, 500px, backfeed, indieweb, comments, likes, favorites +Tags: facebook, flickr, 500px, backfeed, indieweb, comments, likes, favorites Requires at least: 3.0 Tested up to: 4.1 Stable tag: 0.2

@@ -17,8 +17,9 @@ Using the `syndication_urls` post meta field populated by either the [Syndication Links](https://wordpress.org/plugins/syndication-links/) plugin or by hand the Keyring Reactions Importer will pull all the comments, favs, likes, votes, etc. from any supported networks to comments in WordPress.

Currently supported networks: -* [500px](http://500px.com/) - comments, favs, likes -* [Flickr](http://flickr.com/) - comments, favs +* [500px](https://500px.com/) - comments, favs, likes +* [Flickr](https://flickr.com/) - comments, favs +* [Facebook](https://facebook.com/) - comments, likes The plugin uses the brilliant [Keyring](https://wordpress.org/plugins/keyring/) for handling networks and us based on [Keyring Social Importers](https://wordpress.org/plugins/keyring-social-importers/); both from [Beau Lebens](http://dentedreality.com.au/).

@@ -30,6 +31,7 @@ = 0.2 =

*2015-03-13* * adding Flickr +* adding Facebook = 0.1 = *2015-03-12*