X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=scripts%2Fupdate_facebook.php;h=60e10417faf4984557b950d3cc8497c17ee6d7d7;hb=2e518c9d5e3537b9fcb858510063ff815b7eecf7;hp=0c54cec7cfd87cf6907479e29b6bb1c0f596ae70;hpb=12c475c101c070cbcc4c63f7b1049f6d3282b9ee;p=quix0rs-gnu-social.git diff --git a/scripts/update_facebook.php b/scripts/update_facebook.php index 0c54cec7cf..60e10417fa 100755 --- a/scripts/update_facebook.php +++ b/scripts/update_facebook.php @@ -27,29 +27,26 @@ if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); define('LACONICA', true); -require_once(INSTALLDIR . '/lib/common.php'); -require_once(INSTALLDIR . '/lib/facebookutil.php'); +require_once INSTALLDIR . '/lib/common.php'; +require_once INSTALLDIR . '/lib/facebookutil.php'; // For storing the last run date-time $last_updated_file = INSTALLDIR . '/scripts/facebook_last_updated'; // Lock file name -$tmp_file = "/tmp/update_facebook.lock"; +$lock_file = INSTALLDIR . '/scripts/update_facebook.lock'; // Make sure only one copy of the script is running at a time -if (!($tmp_file = @fopen($tmp_file, "w"))) -{ - die("Can't open lock file. Script already running?"); +$lock_file = @fopen($lock_file, "w+"); +if (!flock( $lock_file, LOCK_EX | LOCK_NB, &$wouldblock) || $wouldblock) { + die("Can't open lock file. Script already running?\n"); } -$facebook = get_facebook(); - +$facebook = getFacebook(); $current_time = time(); - -$notice = get_facebook_notices(get_last_updated()); - -print date('r', $current_time) . " Looking for notices to send to Facebook...\n"; - +$since = getLastUpdated(); +updateLastUpdated($current_time); +$notice = getFacebookNotices($since); $cnt = 0; while($notice->fetch()) { @@ -57,11 +54,14 @@ while($notice->fetch()) { $flink = Foreign_link::getByUserID($notice->profile_id, FACEBOOK_SERVICE); $user = $flink->getUser(); $fbuid = $flink->foreign_id; + + if (!userCanUpdate($fbuid)) { + continue; + } - $prefix = $facebook->api_client->data_getUserPreference(1, $fbuid); - + $prefix = $facebook->api_client->data_getUserPreference(FACEBOOK_NOTICE_PREFIX, $fbuid); $content = "$prefix $notice->content"; - + if (($flink->noticesync & FOREIGN_NOTICE_SEND) == FOREIGN_NOTICE_SEND) { // If it's not a reply, or if the user WANTS to send replies... @@ -70,52 +70,72 @@ while($notice->fetch()) { // Avoid a Loop if ($notice->source != 'Facebook') { - update_status($fbuid, $content); - update_profile_box($facebook, $fbuid, $user, $notice); - $cnt++; + + try { + $facebook->api_client->users_setStatus($content, + $fbuid, false, true); + updateProfileBox($facebook, $flink, $notice); + $cnt++; + } catch(FacebookRestClientException $e) { + print "Couldn't sent notice $notice->id!\n"; + print $e->getMessage(); + + // Remove flink? + } } - } + } } } -update_last_updated($current_time); - -print "Sent $cnt notices to Facebook.\n"; +if ($cnt > 0) { + print date('r', $current_time) . + ": Found $cnt new notices for Facebook since last run at " . + date('r', $since) . "\n"; +} +fclose($lock_file); exit(0); - -function update_status($fbuid, $content) { +function userCanUpdate($fbuid) { + global $facebook; + $result = false; + try { - $result = $facebook->api_client->users_setStatus($content, $fbuid, false, true); + $result = $facebook->api_client->users_hasAppPermission('status_update', $fbuid); } catch(FacebookRestClientException $e){ - print_r($e); + print_r($e); } -} - -function get_last_updated(){ - global $last_updated_file, $current_time; - - $file = fopen($last_updated_file, 'r'); - if ($file) { - $last = fgets($file); - } else { - print "Unable to read $last_updated_file. Using current time.\n"; - return $current_time; - } - - fclose($file); + return $result; +} - return $last; +function getLastUpdated(){ + global $last_updated_file, $current_time; + $last = $current_time; + + if (file_exists($last_updated_file) && + ($file = fopen($last_updated_file, 'r'))) { + $last = fgets($file); + } else { + print "$last_updated_file doesn't exit. Trying to create it...\n"; + $file = fopen($last_updated_file, 'w+') or + die("Can't open $last_updated_file for writing!\n"); + print 'Success. Using current time (' . date('r', $last) . + ") to look for new notices.\n"; + } + + fclose($file); + return $last; } -function update_last_updated($time){ - global $last_updated_file; - $file = fopen($last_updated_file, 'w') or die("Can't open $last_updated_file for writing!"); - fwrite($file, $time); - fclose($file); +function updateLastUpdated($time){ + global $last_updated_file; + $file = fopen($last_updated_file, 'w') or + die("Can't open $last_updated_file for writing!"); + fwrite($file, $time); + fclose($file); } +