2014-08-28 163 views
0

我在使用Google圖書API時遇到問題使用Google圖書API

我在使用JSON方面沒有經驗。

我的形式:

<form action="action.php" method="POST"> 
<div class="form-group"> 
    <div class="campos"> 
     <label> 
     Search 
     </label> 
     <input type="text" name="search" style="margin-right: 10px; width:250px; float:left" class="input-field" placeholder="Title, Author..." />  
     <button type="submit" id="search" class="btn btn-default">Search</button> 
    </div> 
</div> 

我的行動:

$var1 = "https://www.googleapis.com/books/v1/volumes?q="; 
$var2 = urlencode($_POST['search']); 
$str = str_replace(" ", "+", $var2); 
$page = $var1.$str; 
header ("location:$page"); 
$data = file_get_contents($page); 
$data = json_decode($page, true); 

所以運行此代碼返回給我含有像一個JSON文件:

{ 
"kind": "books#volumes", 
"totalItems": 584, 
"items": [ 
    { 
    "kind": "books#volume", 
    "id": "NkHwo2hKW6YC", 
    "etag": "FNozDEeE+zY", 
    "selfLink": "https://www.googleapis.com/books/v1/volumes/NkHwo2hKW6YC", 
    "volumeInfo": { 
    "title": "viagem ao redor da lua", 
    "authors": [ 
    "JULIO VERNE" 
    ], 
    "publisher": "Hemus", 
    "description": "Description of book", 
    "industryIdentifiers": [ 
    { 
    "type": "ISBN_10", 
    "identifier": "8528901882" 
    }, 
    { 
    "type": "ISBN_13", 
    "identifier": "9788528901887" 
    } 
    ], 
    "readingModes": { 
    "text": false, 
    "image": true 
    }, 
    "pageCount": 192, 
    "printType": "BOOK", 
    "averageRating": 3.0, 
    "ratingsCount": 4, 
    "contentVersion": "1.1.1.0.preview.1", 
    "imageLinks": { 
    "smallThumbnail": "http://bks6.books.google.com.br/books?id=NkHwo2hKW6YC&printsec=frontcover&img=1&zoom=5&edge=curl&source=gbs_api", 
    "thumbnail": "http://bks6.books.google.com.br/books?id=NkHwo2hKW6YC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api" 
    }, 
    "language": "pt", 
    "previewLink": "http://books.google.com.br/books?id=NkHwo2hKW6YC&printsec=frontcover&dq=Julio+verne&hl=&cd=1&source=gbs_api", 
    "infoLink": "http://books.google.com.br/books?id=NkHwo2hKW6YC&dq=Julio+verne&hl=&source=gbs_api", 
    "canonicalVolumeLink": "http://books.google.com.br/books/about/viagem_ao_redor_da_lua.html?hl=&id=NkHwo2hKW6YC" 
}, 
"saleInfo": { 
    "country": "BR", 
    "saleability": "NOT_FOR_SALE", 
    "isEbook": false 
}, 
"accessInfo": { 
    "country": "BR", 
    "viewability": "PARTIAL", 
    "embeddable": true, 
    "publicDomain": false, 
    "textToSpeechPermission": "ALLOWED", 
    "epub": { 
    "isAvailable": false 
    }, 
    "pdf": { 
    "isAvailable": false 
    }, 
    "webReaderLink": "http://books.google.com.br/books/reader?id=NkHwo2hKW6YC&hl=&printsec=frontcover&output=reader&source=gbs_api", 
    "accessViewStatus": "SAMPLE", 
    "quoteSharingAllowed": false 
}, 
    "searchInfo": { 
    "textSnippet": "Em uma época que não se conhecia a tecnologia, Verne consegue prever em forma de aventura, uma viagem pelo espaço até a Lua." 
} 
}, 
] 
} 

我需要通過php顯示這些信息。

回答

-1

看看PHP的https://developers.google.com/books/docs/v1/libraries的谷歌圖書API客戶端庫(他們有一些例子。)你正在試圖做的是不會,至少,原因有二:

  1. 你有使用您的API密鑰對API進行身份驗證。
  2. header("Location: $page");重定向;它不抓取頁面內容。

編輯:如果您不需要訪問或創建自己的「書架」,則認證部分不是真實的。所以你可以試試:

$data = file_get_contents($page); 
$data = json_decode($data, true); 
$item = $data->items; 
+0

您好,感謝您的反饋。其實我並不需要訪問書架。 我試過你的解決方案,並返回 file_get_contents(https://www.googleapis.com/books/v1/volumes?q=Julio verne):未能打開流:HTTP請求失敗! HTTP/1.0 400錯誤的請求在第9行的C:\ xampp \ htdocs \ book1 \ action.php中 其中我的第9行包含 $ data = file_get_contents($ page); – 2014-08-29 00:32:55

+0

@MarcoAurélio,可能是因爲它是https。看看這個問題http://stackoverflow.com/questions/1975461/file-get-contents-with-https – developerwjk 2014-09-02 18:14:08

+0

嗨@developerwjk,謝謝你的迴應。我改變了代碼,但我仍然收到錯誤。 – 2014-09-02 21:03:13

1

那麼你會檢索JSON信息,這是最難的部分。

爲了通過php打印數據,請嘗試如下所示;

$page = file_get_contents($page); 

$data = json_decode($page, true); 

echo "Title = " . $data['items'][0]['volumeInfo']['title']; 
echo "Authors = " . @implode(",", $data['items'][0]['volumeInfo']['authors']);  
echo "Pagecount = " . $data['items'][0]['volumeInfo']['pageCount'];