Как использовать 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 Features\n[LIST]\n[*]Towns\n[*]Nations\n[*]All out wars\n[*]A live update map\n[*]No White-list\n[*]Earn Money\n[*]Griefing allowed where possible\n[\/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, но у меня возникают некоторые проблемы, вызывающие правильные значения. Вот массив.

Массив ([count] => 1 [threads] => Array ([13] => Array ([thread_id] => 13 [node_id] => 4 [title] => Интеграция в систему почти завершена! [Reply_count] => 0 [view_count] => 0 [user_id] => 59 [username] => Faeron [post_date] => 1369257302 [sticky] => 0 [discussion_state] => visible [обсуждение_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] => visible [attach_count] => 0 [position] => 0 [нравится] => 0 [like_users] => a: 0: {} [warning_id] => 0 [warning_message] =>))))))

Теперь давайте скажем, что этот массив получил имя $array чтобы получить значение первого элемента "[count]", не могу ли я просто сказать следующее: print $array["[count]"] <- это возвращает ошибку.

Что относительно элемента, который имеет значение как сам массив, который является элементом [threads] . Как мне получить, возможно, значение элемента [thread_id] ?

Я думаю, что этот ответ ответит на ваш вопрос: 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 в память и имеете другую зависимость, если вам действительно не нужно завивать, я бы придерживался встроенных функций 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.