2013-06-18 80 views
5

Tôi muốn có thể trích xuất tiêu đề và mô tả từ Wikipedia bằng json. Vì vậy, ... wikipedia không phải là vấn đề của tôi, tôi mới để json và muốn biết làm thế nào để sử dụng nó. Bây giờ tôi biết có hàng trăm hướng dẫn, nhưng tôi đã làm việc trong nhiều giờ và nó chỉ không hiển thị bất cứ điều gì, heres mã của tôi:Trích xuất dữ liệu từ Wikipedia API

<?php 
    $url="http://en.wikipedia.org/w/api.php?action=query&prop=extracts|info&exintro&titles=google&format=json&explaintext&redirects&inprop=url"; 

    $json = file_get_contents($url); 
    $data = json_decode($json, TRUE); 

    $pageid = $data->query->pageids; 
    echo $data->query->pages->$pageid->title; 
?> 

Chỉ cần để nó dễ dàng hơn để bấm:

Tôi biết tôi có thể đã làm một điều rất nhỏ, nhưng nó thực sự làm tôi khó chịu, và mã ... Tôi đã quen sử dụng xml, và tôi đã thực hiện rất nhiều công tắc, vì vậy bạn có thể giải thích nó một chút cho tôi và cho khách truy cập trong tương lai, bởi vì tôi rất confu sed ... Bất cứ điều gì bạn cần mà tôi đã không nói, chỉ cần bình luận nó, im chắc chắn tôi có thể nhận được nó, và cảm ơn, trước!

+0

Thay đổi 'jsonfm' thành 'json'. – halfer

+2

Chỉ có jsonfm trong liên kết biểu diễn html chứ không phải trong mã. –

+0

Ah vâng, bạn nói đúng @Joel. Tôi sẽ thay đổi điều đó, cảm ơn. – halfer

Trả lời

7

$pageid đang trả lại mảng có một phần tử. Nếu bạn chỉ muốn để có được một nắm tay, bạn nên làm điều này:

$pageid = $data->query->pageids[0]; 

Bạn có thể đã nhận được cảnh báo này:

Array to string conversion 

Full mã:

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=extracts|info&exintro&titles=google&format=json&explaintext&redirects&inprop=url&indexpageids'; 

    $json = file_get_contents($url); 
    $data = json_decode($json); 

    $pageid = $data->query->pageids[0]; 
    echo $data->query->pages->$pageid->title; 
+0

Cảm ơn .... Vì vậy, [0] có nghĩa là chính xác những gì? – Connor

+1

Đây là chỉ mục của phần tử bạn muốn truy xuất từ ​​mảng. Nếu mảng có 3 phần tử '$ demo = array ('hi', 'my', 'friend')', thì '$ demo [0]' sẽ là 'hi',' $ demo [2] 'sẽ là' friend' vv Trong trường hợp của bạn, bạn không muốn lấy tất cả các mảng mà là phần tử duy nhất chứa trong nó. Đó là lý do tại sao bạn sử dụng '[0]'. – Alvaro

+0

cảm ơn vì đã giải thích, do đó, về cơ bản nó được chúng theo thứ tự ... ok thanks – Connor

5

tôi muốn làm nó như thế này Nó hỗ trợ có nhiều trang trong cùng một cuộc gọi.

$url = "http://en.wikipedia.org/w/api.php?action=query&prop=extracts|info&exintro&titles=google&format=json&explaintext&redirects&inprop=url"; 

$json = file_get_contents($url); 
$data = json_decode($json, TRUE); 

$titles = array(); 
foreach ($data['query']['pages'] as $page) { 
    $titles[] = $page['title']; 
} 
var_dump($titles); 
/* var_dump returns 
array(1) { 
    [0]=> 
    string(6) "Google" 
} 
*/ 
+0

Helpfull, nhưng tôi chỉ cần nó một lần, 1 cho nỗ lực – Connor

+1

Không có mồ hôi, vui mừng bạn có giải pháp của Steve làm việc. :) –

+0

+1 để trở thành một môn thể thao tốt;) – Connor