How to use cURL to get jSON data and decode data?

So, I have a link that returns a jSON object, and I need it to be decoded and put into variables in PHP.

URL

api.php?action=getThreads&hash=123fajwersa&node_id=4&order_by=post_date&order=desc&limit=1&grab_content&content_limit=1 

This is an object that returns

 { "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": "" } } } } } } 

I'm really only interested

 "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, 

and finally message

 [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] 

So, how can I extract the jSON object and put it in to fix variables in PHP that I can use later?

Variables like: $username , $user_id , $message , $title , $discussionState , etc.

I just need to know how I can get the jSON object and then extract the data into variables in PHP.

Now I can get the PHP array, but I am having problems causing the correct values. Here is the array.

Array ([count] => 1 [threads] => Array ([13] => Array ([thread_id] => 13 [node_id] => 4 [title] => Integration into the system is almost complete! [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 ] => This has been a fairly long time since we started integrating phanime forums with the main site. We’ve completed the integration with Fanim Forums and the main site. You will no longer notice that there are two platforms running phanime, but only one instead. Our next step is the Forum Topic, to make it look like the main site! [ip_id] => 268 [message_state] => visible [attach_count] => 0 [position] => 0 [like] => 0 [like_users] => a: 0: {} [warning_id] => 0 [warning_message] =>)))))))

Now let's say that this array was called $array , and then, to get the first value of the "[count]" element, I can’t just say the following: print $array["[count]"] <- this returns an error.

How about an element that matters like the array itself, which is a [threads] element. How can I get the value of the [thread_id] element?

+75
json api php curl
May 22 '13 at 8:24
source share
6 answers

I think this one will answer your question: 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"; 

Using cURL

 // Initiate curl $ch = curl_init(); // 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)); 

Using file_get_contents

 $result = file_get_contents($url); // Will dump a beauty json :3 var_dump(json_decode($result, true)); 

Access to

 $array["threads"][13/* thread id */]["title"/* thread key */] 

As well as

 $array["threads"][13/* thread id */]["content"/* thread key */]["content"][23/* post id */]["message" /* content key */]; 
+217
May 22 '13 at 20:47
source share

to get an object that you don’t need to use cURL (you load another dll into memory and have a different dependency, if you really do not need to curl, I would stick with the built-in php functions), you can use one simple 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); 

then json_decode () parses JSON in a PHP object or an array if you pass true to the second parameter. http://php.net/manual/en/function.json-decode.php

For example:

 $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 
+10
May 22 '13 at
source share

You can use this for 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; } 

Then to read Json:

 $result=getdata("https://example.com"); 

Then:

 ///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>"; } 

You can also use this:

 echo '<p>Name : '.$data['result']['name'].'</p> <img src="'.$data['result']['pic'].'"><br>'; 

Hope this helps.

+5
Aug 10 '14 at 9:59
source share

Use this function: http://br.php.net/json_decode This will automatically create PHP arrays.

0
May 22 '13 at 20:25
source share

You can also use

 $result = curl_exec($ch); return response()->json(json_decode($result)); 
0
Oct 24 '18 at 15:02
source share

You can use this:

 curl_setopt_array($ch, $options); $resultado = curl_exec($ch); $info = curl_getinfo($ch); print_r($info["url"]); 
-one
Feb 26 '18 at 7:33
source share



All Articles