v2.5.2
Giriş yap

PHP Api getirme sorunu

erdal42
291 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Çok soruyorum gerçekten, kusura bakmayın :/

Bu https://tr.wikipedia.org/w/api.php ile yapılan php kod harika çalışıyor.
Ama bazen arama kısmına mesela almanya gerçeği yazınca, aslında çıkmaması lazım.
Onun yerine bir tane ünlünün soyadını algılayıp title'da getiriyor alakasız.
Bu problemi nasıl çözebiliriz.

//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 $data['snippet'];
        echo '</li>';
    }
}else{
    echo $searchParam . ' hakkında hiç içerik bulunamadı';
}
echo '</ul>';
Cevap yaz
Cevaplar (3)
erdal42
783 gün önce

Yani gidiyor aramada mesela ios 16 ne zaman çıkıyor 'çıkıyor'u algılayıp başka bir şey çıkarıyor. Lütfen yardım edin :D Bunu çözsem çok rahatlıcam. Veya başka php kodu ile de engelleyebilirmiyiz ?

erdal42
783 gün önce

Başka çözüm var mıdır :D

erdal42
784 gün önce

Yada şöyle yapabilir miyiz ?

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

Bu kısım bende böyle şuan. Değiştirdim. Arama yapıldığında sadece ilk kelimesini veya ilk iki kelimesini algılanıp eğer varsa çıkartsa ?
Böyle bir şey yapabilirmiyiz. Büyük ihtimal ile tek ilk mesela;
'araba nasıl çıkar' yerine:
'araba' kelimesini algılasın. Sadece araba kelimesinde varsa ki var. O çıksın. Yoksa nasıl çıkar gibi cümlelerde farklı wiki çıkartıyor.