2016-05-11 2 views
1

У меня проблема, когда я пытаюсь вызвать API с помощью curl. Мой PHP код выглядит следующим образом:Как вызвать REST API с использованием CURL в php?

<html> 
<head> 
<body> 
<span style="z-index:50;font-size:0.9em;"> 
<img src="https://theysaidso.com/branding/theysaidso.png" height="20" width="20" alt="theysaidso.com"/> 
<a href="https://theysaidso.com" title="Powered by quotes from theysaidso.com" style="color: #9fcc25; margin-left: 4px; vertical-align: middle;"> 
theysaidso.com</a></span> 
<?php 
     $service_url = 'http://quotes.rest/qod.json'; 
     $curl = curl_init($service_url); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($curl, CURLOPT_POST, false); 
     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
     $curl_response = curl_exec($curl); 
     curl_close($curl); 
     $json_objekat=json_decode($curl_response); 
     echo $json_objekat->contents->quotes->quote.'<br>'; 
     echo $json_objekat->contents->quotes->author.'<br>';  
?> 
</body> 
</head> 

Этот код сохраняется как PHP файл в моем корневом каталоге на сервере WAMP. Я использую сервер WAMP. И на этом сайте http://quotes.rest/qod.json написано, что вы также должны вставить этот html. Когда я открываю эту PHP страницу на WAMP это показывает предупреждение:

Notice: Undefined property: stdClass::$contents in C:\wamp\www\IzdavackaKuca\javniServis.php on line 18

Notice: Trying to get property of non-object in C:\wamp\www\IzdavackaKuca\javniServis.php on line 18

Notice: Trying to get property of non-object in C:\wamp\www\IzdavackaKuca\javniServis.php on line 18

Notice: Undefined property: stdClass::$contents in C:\wamp\www\IzdavackaKuca\javniServis.php on line 19

Notice: Trying to get property of non-object in C:\wamp\www\IzdavackaKuca\javniServis.php on line 19

Notice: Trying to get property of non-object in C:\wamp\www\IzdavackaKuca\javniServis.php on line 19

JSON по этой ссылке http://quotes.rest/qod.json выглядит следующим образом:

{ 
    "success": { 
     "total": 1 
    }, 
    "contents": { 
     "quotes": [ 
      { 
       "quote": "A loser doesn't know what he'll do if he loses, but talks about what he'll do if he wins, and a winner doesn't talk about what he'll do if he wins, but knows what he'll do if he loses.", 
       "length": "184", 
       "author": null, 
       "tags": [ 
        "failure", 
        "inspire", 
        "knowledge", 
        "winning" 
       ], 
       "category": "inspire", 
       "date": "2016-05-11", 
       "title": "Inspiring Quote of the day", 
       "background":  "https://theysaidso.com/img/bgs/man_on_the_mountain.jpg", 
       "id": "KhjRMynny89MKxcGkEKF_QeF" 
      } 
     ] 
    } 
} 

Когда я изменяю последние две строки в PHP для этого:

echo $json_objekat['contents']['quotes']['quote'].'<br>'; 
    echo $json_objekat['contents']['quotes']['author'].'<br>'; 

он предупреждает:

Fatal error: Cannot use object of type stdClass as array in C:\wamp\www\IzdavackaKuca\javniServis.php on line 18

Я действительно не знаю, как назвать этот сервер, когда я код:

<?php 
    $defaults = array(
     CURLOPT_URL    => 'http://quotes.rest/qod.json', 
     CURLOPT_POST   => false, 
     CURLOPT_HEADER   => false, 
     CURLOPT_SSL_VERIFYPEER => false, 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_SSL_VERIFYHOST => false, 
    ); 
    $curl    = curl_init(); 
    curl_setopt_array($curl, $defaults); 
    $curl_response  = curl_exec($curl); 
    $json_objekat  = json_decode($curl_response); 

    // DUMP THE CURL-ERROR INFORMATION: 
    var_dump(curl_error($curl)); 
    curl_close($curl); 
?> 

он предупреждает:

string '' (length=0)

Пожалуйста, помогите!

ответ

0

Проблема в том, что вы неправильно цитируете цитату и автора. Выход print_r($json_objekat) говорит, что:

contents is stdClass Object
quotes is array
again quotes is having 0 as index which is again stdClass Object

Итак, попытайтесь получить доступ цитаты и автора следующим образом:

$json_objekat->contents->quotes[0]->quote 

$json_objekat->contents->quotes[0]->author 
+0

Да, это работает, спасибо большое !!! – Svetlana

0

Я предполагаю, что это то, что вы собираетесь делать:

<?php 
     $service_url  = 'http://quotes.rest/qod.json'; 
     $curl   = curl_init($service_url); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($curl, CURLOPT_POST, false); 
     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
     $curl_response = curl_exec($curl); 
     curl_close($curl); 
     $json_objekat = json_decode($curl_response); 
     $quotes   = $json_objekat->contents->quotes; 

     foreach($quotes as $intKey=>$objQuote){ 
      echo $objQuote->title  . '<br>'; 
      echo $objQuote->author  . '<br>'; 
      echo $objQuote->quote  . '<br>'; 
      echo $objQuote->background . '<br>'; 
     } 
    ?> 

Но имейте в виду, что вы не можете сделать более 10 запросов за час, используя тот же IP-адрес. Итак, как только вы составите до 10 Запросов, вы будете заблокированы, и вам придется ждать еще 1 час, чтобы продолжить ваши Запросы. Надеюсь, что это помогает ......

+0

Это работает так же, как этот ответ от Suyog. Благодарю тебя! – Svetlana

+0

Эта скобка после кавычек $ quotes = $ json_objekat-> contents-> является избыточной. Это ошибка, я знаю ... – Svetlana

0
<?php 
$conn = mysqli_connect("localhost","root","","mydatabase"); 

if(!$conn){ 
    die("Connection failed: " . mysqli_connect_error()); 
} 

if(!function_exists("curl_init")) die("cURL extension is not installed"); 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, "http://localhost/ketan/all_user.php"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec($curl); 
curl_close($curl); 
echo $result; 
//print_r(json_decode($result));//To Decode Result 
?> 

Output

Output

all_user.php

<?php 
$conn = mysqli_connect("localhost","root","","mydatabase"); 

if(!$conn){ 
    die("Connection failed: " . mysqli_connect_error()); 
} 

$result = mysqli_query($conn,"SELECT * FROM tblUser"); 

$data = array(); 

while ($row = mysqli_fetch_array($result)) { 
    /*$result = array(); 
    $result['userId'] = $row['userId']; 
    $result['firstName'] = $row['firstName']; 
    $result['lastName'] = $row['lastName'];*/ 
    array_push($data, array('userId'=> $row['userId'],'firstName'=> $row['firstName'], 'lastName'=>$row['lastName'], 
     'email'=>$row['email'], 'phoneNumber'=>$row['phoneNumber'], 'userImage'=>"user_images/".$row['userImage'])); 
} 


$return['status'] = true; 
$return['message'] = 'Success'; 
$return['data'] = $data; 
header('Content-Type: application/json'); 
echo json_encode($return, JSON_PRETTY_PRINT); 
$conn->close(); 

?> 
Смежные вопросы