Example #1
0
 public function updateVenues()
 {
     $locationsUpdated = 0;
     $empty_responses = 0;
     $FoursquareClient = new \Foursquare\Client();
     $tracking_logs = \Collection\Tracking_Log::getQueuedItems('foursquare');
     if ($tracking_logs->count() == 0) {
         $this->cliOutput('error', 'Nothing to scan!??? Waiting for 5 minutes.');
         $this->cliOutput('wait', 300);
     }
     // a bunch of foursquare location IDs
     $groupedObjects = \Collection\Mixed::convertObjectIds($tracking_logs);
     foreach ($groupedObjects as $table => $groupedObjectIds) {
         switch ($table) {
             case 'venue':
                 // foursquare: it's possible to make a batch request containing 5 venue IDs
                 $ids = array_chunk($groupedObjectIds, 5, true);
                 foreach ($ids as $venue_ids) {
                     $locations = $FoursquareClient->getVenueInfoBatch($venue_ids);
                     // print_r($locations);
                     // exit;
                     if (!isset($locations->response->responses[0]->meta->code) && $locations->response->responses[0]->meta->code == 403) {
                         $this->cliOutput('error', 'Failure: rate_limit_exceeded Quota exceeded');
                         return;
                     }
                     if (!isset($locations->response->responses)) {
                         $this->cliOutput('error', 'Warning: Empty response (1)');
                         $empty_responses++;
                         if ($empty_responses > 3) {
                             // $this->cliOutput('error', 'Failure: rate_limit_exceeded Quota exceeded');
                             // print_r($venue);
                             // exit;
                         }
                         continue;
                     }
                     foreach ($locations->response->responses as $key => $venue) {
                         if (!isset($venue->response->venue)) {
                             $this->cliOutput('error', 'Warning: Empty response (2)');
                             $empty_responses++;
                             if ($empty_responses > 3) {
                                 // print_r($venue);
                                 // exit;
                                 return false;
                             }
                             continue;
                         }
                         $system_venue_id = array_search($venue->response->venue->id, $venue_ids);
                         if (!$system_venue_id) {
                             $this->cliOutput('error', 'Failure: Unable to get venue ID: ' . $venue->response->venue->id);
                             $this->cliOutput('error', 'IDs: ' . print_r($groupedObjects));
                             // $empty_responses++;
                             // if($empty_responses > 3) {
                             // print_r($venue);
                             // exit;
                             // }
                             continue;
                         }
                         $stats = \Collection\Venue::saveVenueStats($system_venue_id, $venue->response->venue, true);
                         \Collection\Venue::createOrUpdateVenueMetaFoursquare($system_venue_id, $venue->response->venue);
                         if (!is_array($stats)) {
                             $this->CliOutput('error', 'Failure: ' . $stats);
                             continue;
                         }
                         $this->debugMessage('Updated: ' . $venue->response->venue->name . ' / ' . $venue->response->venue->id);
                         $this->debugMessage('Stats: ' . implode(', ', $stats));
                         $locationsUpdated++;
                     }
                 }
                 break;
             default:
                 break;
         }
     }
     $this->emailReport('Locations updated: ' . $locationsUpdated);
     return true;
     // echo \DB::last_query();
 }