JSON verilerini almak ve verilerin kodunu çözmek için cURL nasıl kullanılır?


96

Bu yüzden bir jSON nesnesi döndüren bir bağlantım var ve onun kodunu çözüp PHP'deki değişkenlere koymam gerekiyor.

URL

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

Bu, döndürdüğü nesnedir

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

Gerçekten sadece ilgileniyorum

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

ve son olarak mesaj

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

Öyleyse jSON nesnesini nasıl çıkarabilirim ve daha sonra kullanabileceğim PHP'deki doğru değişkenlere nasıl koyabilirim?

Gibi Değişkenler: $username, $user_id, $message, $title, $discussionState, ve bu kadar.

Sadece jSON nesnesini nasıl elde edeceğimi ve ardından verileri PHP'deki değişkenlere nasıl çıkaracağımı bilmem gerekiyor.

Artık PHP dizisini alabiliyorum, ancak doğru değerleri çağırırken bazı sorunlar yaşıyorum. İşte dizi.

Hayalet forumları ana siteyle bütünleştirmeye başladığımızdan beri epey zaman geçti. Hayalet Forumlar ve ana site ile entegrasyonu şimdi bitirdik. Artık phanime çalıştıran iki platform olduğunu fark etmeyeceksiniz, bunun yerine sadece bir tane. Bir sonraki adımımız, ana site gibi görünmesi için forumların temasını oluşturmaktır! [ip_id] => 268 [message_state] => görünür [attach_count] => 0 [konum] => 0 [beğeniler] => 0 [like_users] => a: 0: {} [uyarı_kimliği] => 0 [uyarı_mesajı] =>))))))

Şimdi, bu dizinin o $arrayzaman birinci elemanın "[count]" değerini almak için adlandırıldığını varsayalım, şunu söyleyemem: print $array["[count]"] <- bu bir hata döndürür.

Bir dizinin kendisi olarak bir değere sahip olan [threads]öğe , bu öğe ne olacak? Belki de [thread_id]elementin değerini nasıl elde ederim ?

Yanıtlar:


267

Sanırım bu soru sorunuzu cevaplayacak: 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";

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

Kullanma file_get_contents

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

Erişim

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

Ve

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

1
Soruyu jSON tarafından döndürülen PHP dizisiyle çalışırken yaşadığım küçük zorluklarla güncelledim. Mümkünse lütfen alt kısmını okuyun.
Maaz

Selam! Cevabınız sayesinde benzer bir soruna yaklaşıyorum ama yine de atm sıkışmış, bir göz atmanın bir sakıncası var mı? stackoverflow.com/questions/28033267/…
Leon Gaban

Doğru. CURLOPT_RETURNTRANSFERbana doğru sonucu ver (y) Teşekkürler!
ariyandi

Saatler geçirdikten sonra, // SSL doğrulamasını devre dışı bırak curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false) satırını ekleyerek; sonucu döndürür.
kta

10

cURL kullanmanız gerekmeyen nesneyi elde etmek için (belleğe başka bir dll yüklüyorsunuz ve başka bir bağımlılığa sahip oluyorsunuz, gerçekten curl'ye ihtiyacınız yoksa yerleşik php işlevlerine bağlı kalırım), basit bir php file_get_contents (url) kullanabilirsiniz işlev: 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);

daha sonra json_decode (), JSON'u bir PHP nesnesine veya trueikinci parametreye iletirseniz bir diziye ayrıştırır . http://php.net/manual/en/function.json-decode.php

Örneğin:

$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

URL ne olacak? İlk olarak jSON nesnesini nasıl alırım ve onu $ json değişkenine nasıl ayarlayabilirim? URL şudur: /api.php?action=getThreads&hash=123fajwersa&node_id=4&order_by=post_date&order=desc&limit=1&grab_content&content_limit=1 jSON nesnesini döndürür.
Maaz

1
Soruyu jSON tarafından döndürülen PHP dizisiyle çalışırken yaşadığım küçük zorluklarla güncelledim. Mümkünse lütfen alt kısmını okuyun.
Maaz

Bu yanlış. File_get_contents () öğesine bir URL iletemezsiniz ... bunun dosya adı (yol) olması gerekir.
Henrik Petterson

@HenrikPetterson: file_get_contents yalnızca yerel dosyaları değil, bir URL'yi getirmek için de kullanılabilir. CURL daha fazla seçenek sunsa da ve muhtemelen en basit kullanım durumları hariç tümü için daha iyi bir seçenektir. Daha fazlası için burayı kontrol edin: php.net/manual/en/function.file-get-contents.php
ineedhelp

7

Bunu Curl için kullanabilirsiniz:

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

Sonra Json'ı Okumak İçin:

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

Sonra :

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

Bunu da Kullanabilirsiniz:

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

Umarım bu yardımcı olmuştur.


bu bana yardımcı oldu. ancak kullanım durumumdaki foreach girdilerinde $ veriyi $ data ['sonuç'] ile değiştirmek zorunda kaldım.
Eaweb


0

Ayrıca kullanabilirsin

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

-2

Bunu kullanabilirsiniz:

curl_setopt_array($ch, $options);
$resultado = curl_exec($ch);
$info = curl_getinfo($ch);
print_r($info["url"]);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.