public function updateVenues($region_id, $cycles = 5) { if (!$region_id) { return false; } $empty_responses = 0; // to get inital entries, just use the foursquare log // $tracking_logs = \Collection\Tracking_Log::getQueuedItems('instagram'); $tracking_logs = \Collection\Tracking_Log::getQueuedItems('foursquare', 'hourly', 100, $region_id); 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 ($tracking_logs as $table => $tracking_log) { $this->updateVenue($tracking_log['object_id'], $cycles); } return true; }
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(); }