v2.5.2
Giriş yap

Wikipedia kategori arama ve resim çekme php ile

erdal42
345 defa görüntülendi ve 2 kişi tarafından değerlendirildi
//Aramak istediğimiz değer
$searchParam = "Test";

$searchTitle = [
    "action" => "query",
    "list" => "search",
    "srsearch" => $searchParam,
    "format" => "json",
    /* Bu değerler kullanılarak sayfalama yapılabilir */
//    "srlimit" => 10,
//    "sroffset" => 9
];

/* verileri çekecek olan metodumuz */
function getData($params){
    $endPoint = "https://en.wikipedia.org/w/api.php";
    $url = $endPoint . "?" . http_build_query( $params );

    $ch = curl_init( $url );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    $output = curl_exec( $ch );
    curl_close( $ch );

    return json_decode( $output, true );
}

echo '<ul>';
$result = getData($searchTitle);

$query = $result['query'];
$total = $query['searchinfo']['totalhits'];
$datas = $query['search'];
/* Sonuç var mı kontrolü */
if ($total){
    foreach ($datas as $data){
        /* görselleri çekmek için belirteceğimiz parametreler */
        $imagesParam = [
            "action" => "query",
            "prop" => "images",
            "titles" => $data['title'],
            "format" => "json",
        ];

        echo '<li>';
        $images = getData($imagesParam);
        $firstPage = reset($images['query']['pages']);
        /* Konuya ait görsel değeri döndümü kontrolü yapılıyor */
        if ($firstPage && count($firstPage['images']) > 0){
            $imageUrlParams = [
                "action" => "query",
                "format" => "json",
                "prop" => "imageinfo",
                // İlk görseli alıyoruz
                "titles" => $firstPage['images'][0]['title'],
                'iiprop' => 'url'
            ];
            /* Görselin detayını çekerek url değerini bulmak için istek atıyoruz */
            $imageUrlResponse = getData($imageUrlParams);
            $imageUrlResponseFirstPage = reset($imageUrlResponse['query']['pages']);
            /* Dönen değer var mı kontrolü */
            if ($imageUrlResponseFirstPage && count($imageUrlResponseFirstPage['imageinfo']) > 0)
                echo '<img width="32" src="'. $imageUrlResponseFirstPage['imageinfo'][0]['url'] .'">';
        }

        echo $data['title'];
        echo '</li>';
    }
}else{
    echo $searchParam . ' hakkında hiç içerik bulunamadı';
}
echo '</ul>';

Yukarıdaki php kodu ile wikipedia'dan verileri rahatlıkla çekebiliyoruz.

Sorduğum ve üzerinde durduğum bir kaç sorunlarımı zaman ayırarak çözmüş oldum.
Tabii ki hepsini değil.

Bazen wikipedia php hatası veriyordu. Bu sorunu şimdilik php hata gizleme ile çözeceüğim.
Açıklama getirememiştim, ancak idare edicek tam olmayan 100 80 metin karaktere kadar çekebilen sorunu buldum. Yani aslnda bu sorunum hakında tam çözmüş değilim
Snippet içinse title gibi

   echo $data['snippet'];

Yani bu açıklama çok kısa. Biraz daha uzun olmasını istiyorum.

Her aramalarda bilgi çekiyor. On numara ama bazen bilgiyi alakasız çekiyor. Sanırım snippet de alabiliyor olabilir bu olabilir diye. Nasıl yapabiliriz.

Ayrıca resmi çekiyor. O da on numara ama resmi o viki bilgisinin içinden ana resmi çekeceğine gidiyor içinden 6 8 veya uyarı resmini çekiyor.
Buda kötü bir durum. Yine düzeltemedim.

Bunlardı sorunlarım. Bir hafta oldu hala tam çözüm bulamadım.
@etukenmez hocam zaten kodun yarısını yazdı. Hatta hepsini ama ufak hatalarım mevcut.
Bir yandan iyi oluyor, kendimi geliştiriyorum. Harika tecrübeler kazanıyorum.

Bu konularda yardımcı olursanız sevinirim.

Wiki api :https://tr.wikipedia.org/w/api.php

Yeniden teşekkürler, yorumlarınızı bekliyorum.

erdal42
1066 gün önce

Sorunları buldum diyip cevapları vereyim ama...
Ne yazık ki hala bulamadım.