Bagaimana cara menggunakan cURL untuk mendapatkan data jSON dan memecahkan kode data?

96

Jadi saya memiliki tautan yang mengembalikan objek jSON, dan saya harus membuatnya diterjemahkan dan dimasukkan ke dalam variabel di PHP.

URL

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

Ini adalah objek yang dikembalikannya

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

Saya benar-benar hanya tertarik pada

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

dan terakhir pesannya

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

Jadi bagaimana cara mengekstrak objek jSON dan memasukkannya ke variabel yang benar di PHP, yang nantinya dapat saya gunakan?

Variabel seperti: $username, $user_id, $message, $title, $discussionState, dan sebagainya.

Saya hanya perlu tahu bagaimana saya bisa mengambil objek jSON, lalu mengekstrak datanya menjadi variabel di PHP.

Saya sekarang bisa mendapatkan array PHP, tetapi saya mengalami beberapa masalah dalam memanggil nilai yang benar. Ini arraynya.

Sudah cukup lama sejak kami mulai mengintegrasikan Forum phanime dengan situs utama. Kami sekarang telah menyelesaikan integrasi dengan Forum phanime dan situs utama. Anda tidak akan lagi melihat bahwa ada dua platform yang menjalankan phanime, tetapi hanya satu. Langkah selanjutnya adalah memberi tema pada forum agar terlihat seperti situs utama! [ip_id] => 268 [message_state] => terlihat [attachment_count] => 0 [posisi] => 0 [suka] => 0 [like_users] => a: 0: {} [warning_id] => 0 [warning_message] =>))))))

Sekarang katakanlah array ini dinamai $arraymaka untuk mendapatkan nilai elemen pertama "[count]" tidak bisakah saya hanya mengatakan yang berikut: print $array["[count]"] <- ini mengembalikan kesalahan.

Bagaimana dengan elemen yang memiliki nilai sebagai array itu sendiri, yang merupakan [threads]elemen. Bagaimana cara mendapatkan, mungkin nilai [thread_id]elemennya?

Maaz
sumber

Jawaban:

268

Saya rasa yang ini akan menjawab pertanyaan Anda: 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";

Menggunakan 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));

Menggunakan file_get_contents

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

Mengakses

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

Dan

$array["threads"][13/* thread id */]["content"/* thread key */]["content"][23/* post id */]["message" /* content key */];
Wesley Schleumer de Góes
sumber
1
Saya telah memperbarui pertanyaan dengan sedikit kesulitan yang saya alami saat bekerja dengan array PHP yang dikembalikan oleh jSON. Silakan baca bagian bawahnya jika Anda bisa.
Maaz
Hai! Saya semakin dekat dengan masalah serupa berkat jawaban Anda, tetapi masih macet, apakah Anda keberatan untuk melihatnya? stackoverflow.com/questions/28033267/…
Leon Gaban
Betul sekali. CURLOPT_RETURNTRANSFERberi saya hasil yang benar (y) Terima kasih!
ariyandi
Setelah menghabiskan waktu berjam-jam, menambahkan baris // Nonaktifkan verifikasi SSL curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false); mengembalikan hasilnya.
kta
10

untuk mendapatkan objek, Anda tidak perlu menggunakan cURL (Anda memuat dll lain ke dalam memori dan memiliki ketergantungan lain, kecuali jika Anda benar-benar membutuhkan curl, saya akan tetap menggunakan fungsi php bawaan), Anda dapat menggunakan satu file_get_contents (url) php sederhana function: 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);

lalu json_decode () mem-parsing JSON menjadi objek PHP, atau array jika Anda meneruskan trueke parameter kedua. http://php.net/manual/en/function.json-decode.php

Sebagai contoh:

$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
Dory Zidon
sumber
Bagaimana dengan url? Bagaimana cara mengambil objek jSON di tempat pertama dan mengaturnya ke variabel $ json? /api.php?action=getThreads&hash=123fajwersa&node_id=4&order_by=post_date&order=desc&limit=1&grab_content&content_limit=1 Urlnya adalah: Yang mengembalikan objek jSON.
Maaz
1
Saya telah memperbarui pertanyaan dengan sedikit kesulitan yang saya alami saat bekerja dengan array PHP yang dikembalikan oleh jSON. Silakan baca bagian bawahnya jika Anda bisa.
Maaz
Ini salah Anda tidak bisa mengirimkan URL ke file_get_contents () ... itu harus nama file (path).
Henrik Petterson
@HenrikPetterson: file_get_contents benar-benar dapat digunakan untuk mengambil URL, tidak hanya file lokal. Meskipun cURL memberikan lebih banyak opsi dan mungkin merupakan opsi yang lebih baik untuk semua kecuali kasus penggunaan yang paling sederhana. Periksa di sini untuk lebih lanjut: php.net/manual/en/function.file-get-contents.php
ineedhelp
7

Anda dapat menggunakan ini untuk 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; 
} 

Kemudian Untuk Membaca Json:

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

Kemudian :

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

Anda Juga Dapat Menggunakan Ini:

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

Semoga ini bisa membantu.

Dragxon Xelosr Huncker
sumber
ini membantu saya. tetapi saya harus mengganti $ data dengan $ data ['result'] di input foreach dalam kasus penggunaan saya.
Eaweb
0

Anda juga bisa menggunakan

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

Anda dapat menggunakan ini:

curl_setopt_array($ch, $options);
$resultado = curl_exec($ch);
$info = curl_getinfo($ch);
print_r($info["url"]);
Sergio Nava
sumber