adding facebook
This commit is contained in:
parent
6e9342aec2
commit
e894933928
5 changed files with 261 additions and 11 deletions
|
@ -74,7 +74,7 @@ class Keyring_500px_Reactions extends Keyring_Reactions_Base {
|
|||
__( '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 @@ class Keyring_500px_Reactions extends Keyring_Reactions_Base {
|
|||
$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 );
|
||||
|
||||
|
|
244
importers/keyring-reactions-facebook.php
Normal file
244
importers/keyring-reactions-facebook.php
Normal file
|
@ -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' )
|
||||
);
|
||||
} );
|
|
@ -68,7 +68,7 @@ class Keyring_Flickr_Reactions extends Keyring_Reactions_Base {
|
|||
__( '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',
|
||||
|
|
|
@ -118,8 +118,9 @@ abstract class Keyring_Reactions_Base {
|
|||
}
|
||||
|
||||
// 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 @@ abstract class Keyring_Reactions_Base {
|
|||
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 @@ abstract class Keyring_Reactions_Base {
|
|||
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 @@ abstract class Keyring_Reactions_Base {
|
|||
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 @@ abstract class Keyring_Reactions_Base {
|
|||
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 );
|
||||
|
@ -888,6 +890,8 @@ abstract class Keyring_Reactions_Base {
|
|||
*/
|
||||
function insert_comment ( &$post_id, &$comment, &$raw, &$avatar = '' ) {
|
||||
|
||||
$comment_id = false;
|
||||
|
||||
//test if we already have this imported
|
||||
$args = array(
|
||||
'author_email' => $comment['comment_author_email'],
|
||||
|
|
|
@ -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 [Syndicatio
|
|||
|
||||
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 @@ The plugin uses the brilliant [Keyring](https://wordpress.org/plugins/keyring/)
|
|||
*2015-03-13*
|
||||
|
||||
* adding Flickr
|
||||
* adding Facebook
|
||||
|
||||
= 0.1 =
|
||||
*2015-03-12*
|
||||
|
|
Loading…
Reference in a new issue