it-swarm.com.de

Wie verwendet man cURL, um JSON-Daten abzurufen und die Daten zu decodieren?

Ich habe also einen Link, der ein jSON-Objekt zurückgibt, und ich muss es dekodieren und in PHP-Variablen einfügen. 

URL

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

Dies ist das Objekt, das es zurückgibt 

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

Mich interessiert eigentlich nur das 

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

und zum Schluss die Nachricht 

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

Wie kann ich also das jSON-Objekt extrahieren und Variablen in PHP korrigieren, die ich später verwenden kann? 

Variablen wie: $username, $user_id, $message, $title, $discussionState und so weiter.

Ich muss nur wissen, wie ich das jSON-Objekt abrufen und dann die Daten in PHP-Variablen extrahieren kann.  

Ich bin jetzt in der Lage, das PHP -Array zu erhalten, aber ich habe einige Probleme beim Aufrufen der richtigen Werte. Hier ist das Array.

Array ([count] => 1 [Threads] => Array ([13] => Array ([Thread_id] => 13 [Node_id] => 4 [Titel] => Forum-Integration fast abgeschlossen! [Reply_Count] => 0 [view_count] => 0 [Benutzer_ID] => 59 [Benutzername] => Faeron [post_date] => 1369257302 [klebrig] => 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 [Benutzername] => Faeron [post_date] => 1369257302 [message] => Es ist schon eine Weile her, seit wir mit der Integration der phanime-Foren mit der Hauptsite begonnen haben Die Integration mit den Foren von phanime und der Hauptseite ist jetzt abgeschlossen. Sie werden nicht mehr bemerken, dass zwei Plattformen von auf phanime laufen, sondern nur auf e. Unser nächster Schritt ist zu thematisiere die Foren, damit es wie die Hauptsite aussieht [ip_id] => 268 [message_state] => visible [attach_count] => 0 [Position] => 0 [Gefällt mir] => 0 [like_users] => a: 0: {} [warn_id] => 0 [warnmeldung] =>))))))

Nehmen wir jetzt an, dieses Array hätte den Namen $array, um den Wert "[count]" des ersten Elements abzurufen, kann ich nicht einfach folgendes sagen: print $array["[count]"] <- dies gibt einen Fehler zurück. 

Was ist mit dem Element, das einen Wert als Array selbst hat, nämlich das [threads]-Element? Wie bekomme ich vielleicht den Wert des [thread_id]-Elements? 

72
Maaz

Ich denke, dies wird Ihre Frage beantworten: 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";

Verwenden von 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));

Verwenden von file_get_contents

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

Zugriff auf

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

Und

$array["threads"][13/* thread id */]["content"/* thread key */]["content"][23/* post id */]["message" /* content key */];

um das Objekt zu erhalten, müssen Sie cURL nicht verwenden (Sie laden eine andere DLL in den Arbeitsspeicher und haben eine andere Abhängigkeit. Wenn Sie nicht wirklich curl benötigen, würde ich mit eingebauten PHP-Funktionen bleiben), können Sie ein einfaches PHP-File_get_contents (url) verwenden. function: http://il1.php.net/manual/de/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);

anschließend analysiert json_decode () JSON in ein PHP - Objekt oder ein Array, wenn Sie true an den zweiten Parameter übergeben. http://php.net/manual/de/function.json-decode.php

Zum Beispiel:

$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
Dory Zidon

Sie können dies für Curl verwenden:

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

Dann Json zu lesen:

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

Dann :

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

Sie können dies auch verwenden:

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

Hoffe das hat geholfen.

Verwenden Sie diese Funktion: http://br.php.net/json_decode Dadurch werden automatisch PHP - Arrays erstellt.

0

sie können auch verwenden 

$result = curl_exec($ch);
return response()->json(json_decode($result));
0
HeshamSalama