Use batch requests when syncing friends; this reduces the time for synchronization a lot
This commit is contained in:
parent
8a3643e8db
commit
1df6f59127
|
@ -46,7 +46,7 @@
|
||||||
* in a future release.
|
* in a future release.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** TODO
|
/** TODO
|
||||||
* - Implement a method for the administrator to delete all configuration data the plugin has created,
|
* - Implement a method for the administrator to delete all configuration data the plugin has created,
|
||||||
* e.g. the app_access_token
|
* e.g. the app_access_token
|
||||||
*/
|
*/
|
||||||
|
@ -197,7 +197,6 @@ function facebook_init(&$a) {
|
||||||
$auth_code = (x($_GET, 'code') ? $_GET['code'] : '');
|
$auth_code = (x($_GET, 'code') ? $_GET['code'] : '');
|
||||||
$error = (x($_GET, 'error_description') ? $_GET['error_description'] : '');
|
$error = (x($_GET, 'error_description') ? $_GET['error_description'] : '');
|
||||||
|
|
||||||
|
|
||||||
if($error)
|
if($error)
|
||||||
logger('facebook_init: Error: ' . $error);
|
logger('facebook_init: Error: ' . $error);
|
||||||
|
|
||||||
|
@ -243,7 +242,9 @@ function fb_get_self($uid) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function fb_get_friends_sync_new($uid, $access_token, $person) {
|
function fb_get_friends_sync_new($uid, $access_token, $persons) {
|
||||||
|
$persons_todo = array();
|
||||||
|
foreach ($persons as $person) {
|
||||||
$link = 'http://facebook.com/profile.php?id=' . $person->id;
|
$link = 'http://facebook.com/profile.php?id=' . $person->id;
|
||||||
|
|
||||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
|
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
|
||||||
|
@ -253,30 +254,25 @@ function fb_get_friends_sync_new($uid, $access_token, $person) {
|
||||||
|
|
||||||
if (count($r) == 0) {
|
if (count($r) == 0) {
|
||||||
logger('fb_get_friends: new contact found: ' . $link, LOGGER_DEBUG);
|
logger('fb_get_friends: new contact found: ' . $link, LOGGER_DEBUG);
|
||||||
|
$persons_todo[] = $person;
|
||||||
|
}
|
||||||
|
|
||||||
fb_get_friends_sync_full($uid, $access_token, $person);
|
if (count($persons_todo) > 0) fb_get_friends_sync_full($uid, $access_token, $persons_todo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function fb_get_friends_sync_full($uid, $access_token, $person) {
|
function fb_get_friends_sync_parsecontact($uid, $contact) {
|
||||||
$s = fetch_url('https://graph.facebook.com/' . $person->id . '?access_token=' . $access_token);
|
$contact->link = 'http://facebook.com/profile.php?id=' . $contact->id;
|
||||||
if($s) {
|
|
||||||
$jp = json_decode($s);
|
|
||||||
logger('fb_get_friends: info: ' . print_r($jp,true), LOGGER_DATA);
|
|
||||||
|
|
||||||
// always use numeric link for consistency
|
|
||||||
|
|
||||||
$jp->link = 'http://facebook.com/profile.php?id=' . $person->id;
|
|
||||||
|
|
||||||
// If its a page then set the first name from the username
|
// If its a page then set the first name from the username
|
||||||
if (!$jp->first_name and $jp->username)
|
if (!$contact->first_name and $contact->username)
|
||||||
$jp->first_name = $jp->username;
|
$contact->first_name = $contact->username;
|
||||||
|
|
||||||
// check if we already have a contact
|
// check if we already have a contact
|
||||||
|
|
||||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
|
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
|
||||||
intval($uid),
|
intval($uid),
|
||||||
dbesc($jp->link)
|
dbesc($contact->link)
|
||||||
);
|
);
|
||||||
|
|
||||||
if(count($r)) {
|
if(count($r)) {
|
||||||
|
@ -286,7 +282,7 @@ function fb_get_friends_sync_full($uid, $access_token, $person) {
|
||||||
if((! $r[0]['photo']) || (! $r[0]['thumb']) || (! $r[0]['micro'])) {
|
if((! $r[0]['photo']) || (! $r[0]['thumb']) || (! $r[0]['micro'])) {
|
||||||
require_once("Photo.php");
|
require_once("Photo.php");
|
||||||
|
|
||||||
$photos = import_profile_photo('https://graph.facebook.com/' . $jp->id . '/picture', $uid, $r[0]['id']);
|
$photos = import_profile_photo('https://graph.facebook.com/' . $contact->id . '/picture', $uid, $r[0]['id']);
|
||||||
|
|
||||||
$r = q("UPDATE `contact` SET `photo` = '%s',
|
$r = q("UPDATE `contact` SET `photo` = '%s',
|
||||||
`thumb` = '%s',
|
`thumb` = '%s',
|
||||||
|
@ -316,15 +312,15 @@ function fb_get_friends_sync_full($uid, $access_token, $person) {
|
||||||
VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
|
VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
|
||||||
intval($uid),
|
intval($uid),
|
||||||
dbesc(datetime_convert()),
|
dbesc(datetime_convert()),
|
||||||
dbesc($jp->link),
|
dbesc($contact->link),
|
||||||
dbesc(normalise_link($jp->link)),
|
dbesc(normalise_link($contact->link)),
|
||||||
dbesc(''),
|
dbesc(''),
|
||||||
dbesc(''),
|
dbesc(''),
|
||||||
dbesc($jp->id),
|
dbesc($contact->id),
|
||||||
dbesc('facebook ' . $jp->id),
|
dbesc('facebook ' . $contact->id),
|
||||||
dbesc($jp->name),
|
dbesc($contact->name),
|
||||||
dbesc(($jp->nickname) ? $jp->nickname : strtolower($jp->first_name)),
|
dbesc(($contact->nickname) ? $contact->nickname : strtolower($contact->first_name)),
|
||||||
dbesc('https://graph.facebook.com/' . $jp->id . '/picture'),
|
dbesc('https://graph.facebook.com/' . $contact->id . '/picture'),
|
||||||
dbesc(NETWORK_FACEBOOK),
|
dbesc(NETWORK_FACEBOOK),
|
||||||
intval(CONTACT_IS_FRIEND),
|
intval(CONTACT_IS_FRIEND),
|
||||||
intval(1),
|
intval(1),
|
||||||
|
@ -333,7 +329,7 @@ function fb_get_friends_sync_full($uid, $access_token, $person) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1",
|
$r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1",
|
||||||
dbesc($jp->link),
|
dbesc($contact->link),
|
||||||
intval($uid)
|
intval($uid)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -364,7 +360,23 @@ function fb_get_friends_sync_full($uid, $access_token, $person) {
|
||||||
dbesc(datetime_convert()),
|
dbesc(datetime_convert()),
|
||||||
intval($contact_id)
|
intval($contact_id)
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fb_get_friends_sync_full($uid, $access_token, $persons) {
|
||||||
|
if (count($persons) == 0) return;
|
||||||
|
$nums = Ceil(count($persons) / 50);
|
||||||
|
for ($i = 0; $i < $nums; $i++) {
|
||||||
|
$batch_request = array();
|
||||||
|
for ($j = $i * 50; $j < ($i+1) * 50 && $j < count($persons); $j++) $batch_request[] = array('method'=>'GET', 'relative_url'=>$persons[$j]->id);
|
||||||
|
$s = post_url('https://graph.facebook.com/', array('access_token' => $access_token, 'batch' => json_encode($batch_request)));
|
||||||
|
if($s) {
|
||||||
|
$results = json_decode($s);
|
||||||
|
logger('fb_get_friends: info: ' . print_r($results,true), LOGGER_DATA);
|
||||||
|
foreach ($results as $contact) {
|
||||||
|
if ($contact->code != 200) logger('fb_get_friends: not found: ' . print_r($contact,true), LOGGER_DEBUG);
|
||||||
|
else fb_get_friends_sync_parsecontact($uid, json_decode($contact->body));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -393,11 +405,14 @@ function fb_get_friends($uid, $fullsync = true) {
|
||||||
logger('facebook: fb_get_friends: json: ' . print_r($j,true), LOGGER_DATA);
|
logger('facebook: fb_get_friends: json: ' . print_r($j,true), LOGGER_DATA);
|
||||||
if(! $j->data)
|
if(! $j->data)
|
||||||
return;
|
return;
|
||||||
foreach($j->data as $person)
|
|
||||||
|
$persons_todo = array();
|
||||||
|
foreach($j->data as $person) $persons_todo[] = $person;
|
||||||
|
|
||||||
if ($fullsync)
|
if ($fullsync)
|
||||||
fb_get_friends_sync_full($uid, $access_token, $person);
|
fb_get_friends_sync_full($uid, $access_token, $persons_todo);
|
||||||
else
|
else
|
||||||
fb_get_friends_sync_new($uid, $access_token, $person);
|
fb_get_friends_sync_new($uid, $access_token, $persons_todo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -477,7 +492,7 @@ function facebook_content(&$a) {
|
||||||
if (get_pconfig(local_user(),'facebook','post')) {
|
if (get_pconfig(local_user(),'facebook','post')) {
|
||||||
$access_token = get_pconfig(local_user(),'facebook','access_token');
|
$access_token = get_pconfig(local_user(),'facebook','access_token');
|
||||||
if ($access_token) {
|
if ($access_token) {
|
||||||
$private_wall = intval(get_pconfig($uid,'facebook','private_wall'));
|
$private_wall = intval(get_pconfig(local_user(),'facebook','private_wall'));
|
||||||
$s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token);
|
$s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token);
|
||||||
if($s) {
|
if($s) {
|
||||||
$j = json_decode($s);
|
$j = json_decode($s);
|
||||||
|
@ -1179,7 +1194,7 @@ function fb_queue_hook(&$a,&$b) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function fb_get_timeline($access_token, &$since) {
|
function fb_get_timeline($access_token, &$since) {
|
||||||
|
$entries = new stdClass();
|
||||||
$entries->data = array();
|
$entries->data = array();
|
||||||
$newest = 0;
|
$newest = 0;
|
||||||
|
|
||||||
|
@ -1759,7 +1774,7 @@ function facebook_check_realtime_active() {
|
||||||
// DELETE-request to $url
|
// DELETE-request to $url
|
||||||
|
|
||||||
if(! function_exists('facebook_delete_url')) {
|
if(! function_exists('facebook_delete_url')) {
|
||||||
function facebook_delete_url($url,$headers = null, &$redirects = 0, $timeout = 0) {
|
function facebook_delete_url($url,$headers = null, &$redirects = 0, $timeout = 0) {
|
||||||
$a = get_app();
|
$a = get_app();
|
||||||
$ch = curl_init($url);
|
$ch = curl_init($url);
|
||||||
if(($redirects > 8) || (! $ch))
|
if(($redirects > 8) || (! $ch))
|
||||||
|
@ -1840,4 +1855,4 @@ function facebook_delete_url($url,$headers = null, &$redirects = 0, $timeout = 0
|
||||||
|
|
||||||
curl_close($ch);
|
curl_close($ch);
|
||||||
return($body);
|
return($body);
|
||||||
}}
|
}}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user