Мне просто нужна помощь по этой проблеме. Вот что я хотел достичь в своем выводе php, так как это структура, которая нужна. Массив объектов событий, возвращаемых как JSON.
[
{
"page_item_url":"2111",
"data":{
"startTime":"11:00"
"endTime":"12:00",
"summary":"<p>This has html tags in it from API<p>"
}
},{
"page_item_url":"2112",
"data":{
"startTime":"11:00"
"endTime":"12:00",
"summary":"<p>This has html tags in it from API<p>"
}
}
]
Возвращенный JSON должен быть таким, это был вызов из API с использованием cUrl. У меня есть функция, которая сначала получает все идентификаторы, и я передаю ее в переменную;
function getOpportunityYearly(){
//curl here...
//I pushed all the ID in my array to the global scope
}
Итак, теперь у меня есть массив идентификаторов:
$events = [2111,2112,2113,2114,2115];//etc
$jsonResponse = [];
, в котором я бы Я хотел бы выполнить l oop и вызвать еще один cUrl из API, который затем следует протолкнуть через $ jsonResponse. Моя проблема заключается в том, что я передаю возвращенный ответ из getEventByID и преобразовываю его в json структура не верна.
for($i=0;$i<count($events);$i++){
getEventByID($events[$i]);
}
function getEventByID($eventID){
curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL =>'https://sampleapi.com/api/v3/data/opportunities/'.$eventID.'?key='.$GLOBALS['API_KEY'].'&fields=["startTime","endTime","physicalDifficulty","summary"]&where={"whereType":"AND","clauses":[{"fieldName":"displayToPublic","operator":"checked"}]}',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
$response = json_decode(curl_exec($curl));
curl_close($curl);
$record = $response->records[0];
return json_encode([[
"page_item_url"=> $record->opportunities_id->value,
"data"=>[
"startTime"=>$record->startTime->displayValue,
"endTime"=>$record->endTime->displayValue,
"summary"=>$record->summary->displayValue,
]
]],JSON_HEX_QUOT | JSON_HEX_TAG);
}
Возвращение функции getEventByID должно иметь формат json, как в приведенном выше примере json, когда я пытаюсь использовать код, возвращенный из getEventByID, для одного объекта, хорошо, см. https://prnt.sc/ris9g7 но когда я пу sh сначала отвечаю на глобальную переменную массива, а затем кодирую его, получается что-то вроде https://prnt.sc/risjw5
Я попытался создать массив и пу sh все возвращается из getEventByID, но вывод не является строкой JSON, это был массив. Я делаю что-то не так.
Когда я использую forl oop, страница была медленной, и она получала максимальный тайм-аут 30 секунд, я попытался использовать $ curl, CURLOPT_TIMEOUT_MS и установить его на 5 минут. Но есть ли другой способ сделать этот CURL не медленным? Или это нормально, поскольку мы получаем все объекты событий ID из API? Можете ли вы посоветовать что-нибудь, чтобы улучшить это?
Это возвращаемый тип из getEventByID https://prnt.sc/ris8zx Так я создаю и возвращаю одно событие из ответа curl https://prnt.sc/ris9c0 Это правильное значение, которое я получил https://prnt.sc/ris9g7 как бы то ни было, если я уберу скобки в коде json_encode и просто передам массив значений ключа asso c, затем pu sh в массив