ситуация
Я делаю функцию на уже существующем веб-сайте. С помощью этой функции вы можете импортировать контакты из Google. Во всяком случае .. Мой босс сказал мне, что я должен использовать Task-Queues, чтобы получить контакты из API. Это потому, что некоторые люди имеют более 9000 (каламбур) контактов, и когда эти люди пытаются импортировать свои контакты, это будет очень медленно.
Вопрос
Как я могу использовать очереди задач, чтобы получить контакты и добавить эти 1 на 1 в массив.
Код
$return = array();
if (!empty($contacts['feed']['entry'])) {
foreach($contacts['feed']['entry'] as $contact) {
//retrieve Name and email address
$exploded = explode("/", $contact['id']['$t']);
$return[] = array (
'firstname'=> $contact['gd$name']['gd$givenName']['$t'],
'lastname'=> $contact['gd$name']['gd$familyName']['$t'],
'email' => $contact['gd$email'][0]['address'],
'phoneNumber' => $contact['gd$phoneNumber'][0]['$t'],
'city' => $contact['gd$structuredPostalAddress'][0]['gd$city']['$t'],
'street' => $contact['gd$structuredPostalAddress'][0]['gd$street']['$t'],
'country' => $contact['gd$structuredPostalAddress'][0]['gd$country']['$t'],
'birthday' => $contact['gContact$birthday']['when'],
'id' => end($exploded),
);
}
}
$google_contacts = $return;
unset($_SESSION['google_code']);
}
Первое, что следует помнить об очередях задач, это то, что они выполняются независимо от запроса, который их вызвал, поэтому вы не можете ждать, пока они завершат работу и вернут этот массив пользователю — задача должна где-то его сохранить или что-то с ним сделать ,
start_import.php:
$task = new PushTask('/do_import', $contacts);
$task->add();
echo("Started import job!");
do_import.php:
if (!empty($contacts['feed']['entry'])) {
foreach($contacts['feed']['entry'] as $contact) {
//retrieve Name and email address
$exploded = explode("/", $contact['id']['$t']);
$return[] = array (
'firstname'=> $contact['gd$name']['gd$givenName']['$t'],
'lastname'=> $contact['gd$name']['gd$familyName']['$t'],
'email' => $contact['gd$email'][0]['address'],
'phoneNumber' => $contact['gd$phoneNumber'][0]['$t'],
'city' => $contact['gd$structuredPostalAddress'][0]['gd$city']['$t'],
'street' => $contact['gd$structuredPostalAddress'][0]['gd$street']['$t'],
'country' => $contact['gd$structuredPostalAddress'][0]['gd$country']['$t'],
'birthday' => $contact['gContact$birthday']['when'],
'id' => end($exploded),
);
}
}
// Do something with $return, like persist it to the Datastore or Cloud Storage...
Пример обработчиков app.yaml:
handlers:
- url: /do_import
script: do_import.php
- url: /start_import
script: start_import.php
И конечно, это помогает читать документы для получения дополнительной информации:
Использование Push-очередей в PHP
https://cloud.google.com/appengine/docs/php/taskqueue/overview-push
Других решений пока нет …