Как использовать cURL для получения данных jSON и декодирования данных?
Итак, у меня есть ссылка, которая возвращает объект jSON, и мне нужно, чтобы он был декодирован и помещен в переменные в PHP.
URL
api.php?action=getThreads&hash=123fajwersa&node_id=4&order_by=post_date&order=desc&limit=1&grab_content&content_limit=1
это объект, который она возвращает
{
"count": 1,
"threads": {
"38752": {
"thread_id": 38752,
"node_id": 4,
"title": "The ShadyCraft Beta Launch!",
"reply_count": 45,
"view_count": 946,
"user_id": 2,
"username": "Shady",
"post_date": 1366956695,
"sticky": 0,
"discussion_state": "visible",
"discussion_open": 1,
"discussion_type": "",
"first_post_id": 226167,
"first_post_likes": 7,
"last_post_date": 1369094302,
"last_post_id": 228226,
"last_post_user_id": 2,
"last_post_username": "Shady",
"prefix_id": 19,
"tinhte_xentag_tags": "a:4:{i:0;s:9:"minecraft";i:2;s:4:"news";i:3;s:14:"private server";i:1;s:10:"shadycraft";}",
"content": {
"count": 1,
"content": {
"226167": {
"post_id": 226167,
"thread_id": 38752,
"user_id": 2,
"username": "Shady",
"post_date": 1366956695,
"message": "[ATTACH=full]4143[/ATTACH]n nWe've completely restructured ShadyCraft, and today will be the launch of the ShadyCraft beta.n nCurrent Featuresn[LIST]n[*]Townsn[*]Nationsn[*]All out warsn[*]A live update mapn[*]No White-listn[*]Earn Moneyn[*]Griefing allowed where possiblen[/LIST]nThese are just some features which have a lot more things behind them. For instance, there is town and nation upkeep, tax, kingdoms, mayors, and kings.n nWe really wanted to have the server self-governed and this is why griefing and PvP are allowed where ever they are possible. All towns and nations cannot be griefed by other members. You can create a town and buy plots for it and expand the town as you wish.n n[SIZE=4]All of this is shown in the live updating map located [URL='http://50.7.6.116:8123']here[/URL].[/SIZE]n n[SIZE=4][SIZE=6]Join the Beta Now[/SIZE][/SIZE]n[SIZE=6]Server-IP: 50.7.6.116[/SIZE]n n n[USER=118053]Frenchy[/USER] and [USER=4863]Wolfbane[/USER]",
"ip_id": 747429,
"message_state": "visible",
"attach_count": 1,
"position": 0,
"likes": 7,
"like_users": "a:5:{i:0;a:2:{s:7:"user_id";i:105699;s:8:"username";s:6:"kvothe";}i:1;a:2:{s:7:"user_id";i:146724;s:8:"username";s:12:"Graveyard219";}i:2;a:2:{s:7:"user_id";i:70182;s:8:"username";s:9:"wmbrown18";}i:3;a:2:{s:7:"user_id";i:5473;s:8:"username";s:9:"Oblivious";}i:4;a:2:{s:7:"user_id";i:118053;s:8:"username";s:7:"Frenchy";}}",
"warning_id": 0,
"warning_message": "",
"anonymous_posting_real_user_id": 0,
"anonymous_posting_real_username": ""
}
}
}
}
}
}
меня действительно интересует только
"title":"The ShadyCraft Beta Launch!",
"reply_count:"45,
"view_count": 946,
"user_id":2,
"username":"Shady",
"post_date":1366956695,
"sticky":0,
"discussion_state":"visible",
"discussion_open":1,
и наконец
[ATTACH=full]4143[/ATTACH]
We've completely restructured ShadyCraft, and today will be the launch of the ShadyCraft beta.
Current Features
[LIST]
[*]Towns
[*]Nations
[*]All out wars
[*]A live update map
[*]No White-list
[*]Earn Money
[*]Griefing allowed where possible
[/LIST]
These are just some features which have a lot more things behind them. For instance, there is town and nation upkeep, tax, kingdoms, mayors, and kings.
We really wanted to have the server self-governed and this is why griefing and PvP are allowed where ever they are possible. All towns and nations cannot be griefed by other members. You can create a town and buy plots for it and expand the town as you wish.
[SIZE=4]All of this is shown in the live updating map located [URL='http://50.7.6.116:8123']here[/URL].[/SIZE]
[SIZE=4][SIZE=6]Join the Beta Now[/SIZE][/SIZE]
[SIZE=6]Server-IP: 50.7.6.116[/SIZE]
[USER=118053]Frenchy[/USER] and [USER=4863]Wolfbane[/USER]
Итак, как я могу извлечь объект jSON и поместить его в правильные переменные в PHP, которые я могу использовать позже?
переменные, такие как: $username
,$user_id
,$message
,$title
,$discussionState
и так далее.
мне просто нужно знать, как я могу получить объект jSON, а затем извлечь данные в переменные в PHP.
теперь я могу получить массив PHP, но у меня возникли некоторые проблемы с вызовом правильных значений. Вот такой массив.
Array ( [count] = > 1 [threads] = > Array ( [13] => Array ([thread_id] => 13 [ид_узла] => 4 [title] = > интеграция форума почти завершена! [reply_count] => 0 [view_count] => 0 [user_id] = > 59 [username] => Faeron [post_date] => 1369257302 [sticky] = > 0 [discussion_state] => visible [discussion_open] = > 1 [discussion_type] = > [first_post_id] => 23 [first_post_likes] => 0 [last_post_date] => 1369257302 [last_post_id] = > 23 [last_post_user_id] = > 59 [last_post_username] => Faeron [prefix_id] => 1 [content] => Array ([count] => 1 [content] => Array ([23] = > Array ( [post_id] = > 23 [thread_id] = > 13 [user_id] => 59 [username] => Faeron [post_date] => 1369257302 [message] => это прошло довольно много времени с тех пор, как мы начали интегрировать форумы phanime с основной сайт. Теперь мы закончили интеграцию с phanime Форумы и основной сайт. Вы больше не заметите, что есть два платформы под управлением phanime, но вместо этого только одна. Наш следующий шаг - тема форумы, чтобы сделать его похожим на основной сайт! [ip_id] => 268 [message_state] => видна [attach_count] => 0 [position] => 0 [likes] => 0 [like_users] = > a:0: {} [warning_id] => 0 [warning_message] => ) ) ) ) ) )
теперь предположим, что этот массив был назван $array
затем, чтобы получить значение первого элемента "[count]", я не могу просто сказать следующее:print $array["[count]"]
как насчет элемента, который имеет значение как сам массив, который является [threads]
элемент. Как я могу получить, возможно, элемент?
5 ответов:
Я думаю, что это ответит на ваш вопрос: P
$url="https://.../api.php?action=getThreads&hash=123fajwersa&node_id=4&order_by=post_date&order=desc&limit=1&grab_content&content_limit=1";
используя
cURL
// Initiate curl $ch = curl_init(); // Disable SSL verification curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Will return the response, if false it print the response curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Set the url curl_setopt($ch, CURLOPT_URL,$url); // Execute $result=curl_exec($ch); // Closing curl_close($ch); // Will dump a beauty json :3 var_dump(json_decode($result, true));
используя
file_get_contents
$result = file_get_contents($url); // Will dump a beauty json :3 var_dump(json_decode($result, true));
ссылке
$array["threads"][13/* thread id */]["title"/* thread key */]
и
$array["threads"][13/* thread id */]["content"/* thread key */]["content"][23/* post id */]["message" /* content key */];
чтобы получить объект, вам не нужно использовать cURL (вы загружаете другую dll в память и имеете другую зависимость, Если вам действительно не нужен curl, я бы придерживался встроенных функций php), вы можете использовать одну простую функцию php file_get_contents (url: http://il1.php.net/manual/en/function.file-get-contents.php
$unparsed_json = file_get_contents("api.php?action=getThreads&hash=123fajwersa&node_id=4&order_by=post_date&order=desc&limit=1&grab_content&content_limit=1"); $json_object = json_decode($unparsed_json);
затем json_decode () анализирует JSON в объект PHP или массив, если вы передаете
true
второй параметр. http://php.net/manual/en/function.json-decode.phpнапример:
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); // Object var_dump(json_decode($json, true)); // Associative array
вы можете использовать это для Curl:
function fakeip() { return long2ip( mt_rand(0, 65537) * mt_rand(0, 65535) ); } function getdata($url,$args=false) { global $session; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HTTPHEADER, array("REMOTE_ADDR: ".fakeip(),"X-Client-IP: ".fakeip(),"Client-IP: ".fakeip(),"HTTP_X_FORWARDED_FOR: ".fakeip(),"X-Forwarded-For: ".fakeip())); if($args) { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,$args); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1:8888"); $result = curl_exec ($ch); curl_close ($ch); return $result; }
Затем Читать Json:
$result=getdata("https://site.com");
затем :
///Deocde Json $data = json_decode($result,true); ///Count $total=count($data); $Str='<h1>Total : '.$total.''; echo $Str; //You Can Also Make In Table: foreach ($data as $key => $value) { echo ' <td><font face="calibri"color="red">'.$value[type].' </font></td><td><font face="calibri"color="blue">'.$value[category].' </font></td><td><font face="calibri"color="green">'.$value[amount].' </font></tr><tr>'; } echo "</tr></table>"; }
Вы Также Можете Использовать Это:
echo '<p>Name : '.$data['result']['name'].'</p> <img src="'.$data['result']['pic'].'"><br>';
надеюсь, что это помогло.
используйте эту функцию:http://br.php.net/json_decode Это автоматически создаст PHP массивы.