v2.5.2
Giriş yap

Wikipedia verileri toparlama ve eksiklikler

erdal42
417 defa görüntülendi ve 1 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 kodu @etukenmez hocam yazmış olup bana büyük destek olmuştur.

Bazı sorunlarım ile birlikte

$searchParam = htmlspecialchars($_GET['q']);

Bazı sorunlarım ile birlikte

$searchTitle = [
	"action"=> "query",
	"format"=> "json",
	"prop"=> "imageinfo|images|info|links|categories|description",
	"list"=> "search",
	"titles"=> $searchParam,
	"srsearch"=> $searchParam
]

değiştirerek sorunu çözdüm.

Ancak şöyle bir problem var.
Bazı sorunlarım ile birlikte

}else{
    echo $searchParam . ' hakkında hiç içerik bulunamadı';
}

Kısmında bulunan echo'yu div vererek, eğer bilgi olmadığında veya bulamadığında div ile display:none ile kapatmaya çalıştım. Ancak ne yazık ki çalışmadı.
Verilen resimler viki'nin içinde bulunan resimlerde 4. veya 6. hatta 5. resimlerde birini veriyor. Ben ise 1.resmi çekmek istiyorum.
Ayrıca bu php kodlar ile de sadece 200 300 yani özet olarak verecek açıklamalı yazıyı da eklemek istiyorum. 2 gündür uğraşıyorum ne yazık ki yapamadım.
200 300 karakter yazılı benim için yetecek.

@etukenmez hocama teşekkürlerimi iletiyorum.

Küçük problemler kaldı. Bunlar çözüldüğünde herşeyim tam olacak. 2 3 gündür bunla uğraşmaktayım.
Ayrıca verilen kodlarda ingilizce olarak alıyor. Onu

$endPoint = "https://tr.wikipedia.org/w/api.php";

olarak çevirdiğimde düzeliyordu. Yeniden teşekkürler. Yeni başladığim için çok eksiğim var. :)

Cevap yaz
Cevaplar (2)
erdal42
1067 gün önce

Açıklama yani özet derken snippet kodunu kullanacağız ancak yapamadım bir türlü.

erdal42
1068 gün önce



Resimlerdeki gibi ana resmi çekecekken başka resmi çekiyor. Gidiyor küçük svg veya png'yi çekebiliyor. Yada wiki'nin uyarı koyduğu simgesini bile çekiyor.
Bunu nasıl düzeltiriz. Ana resminin çekmesini istiyorum. Bir türlü olmuyor :/ Kendimi geliştirmeye çalışıyorum 2 3 gündür buna veriyorum zamanımı ama.
Deneyim yaşamadan olmuyor. Çok hata yapıyorum. Lütfen yardımlarınızı bekliyorum.