Intereting Posts
Как мы можем конвертировать видео файлы в формат .flv в php Изменение цвета и вывода журнала ошибок php MAMP в терминале Symfony 3 Перенаправление всех маршрутов в текущую версию локали Regex PHP – автоматическое определение YouTube, изображений и «регулярных» ссылок Потребление не подтверждается сообщениями от RabbitMq PHP-печать на локальный термальный принтер не работает без имени сети Автоматическое добавление товара в корзину, когда другой товар присутствует в пурпурной тележке Как использовать коллекции на фабрике fieldset в ZF2 PHP-массив vs в описании метода и переменной Преобразование многоязычной функции Получение UDP-пакетных дейтаграмм в PHP Как создать объект Crypt :: RSA из модуля, экспоненты и частного экспонента? Есть ли способ увидеть подготовленный запрос, поскольку он будет выполнен в базе данных? Сценарий Python отправляет изображение на PHP Кратчайшая возможная кодированная строка с возможностью декодирования (сокращать URL) с использованием только PHP

Доступ к основному изображению страницы wikipedia по API

Есть ли способ получить доступ к миниатюрному изображению любой страницы wikipedia с помощью API? Я имею в виду изображение в верхней правой части окна. Есть ли для этого API?

http://en.wikipedia.org/w/api.php

Посмотрите на prop=images .

Он возвращает массив имен файлов изображений, которые используются на анализируемой странице. Затем у вас есть возможность сделать другой вызов API, чтобы узнать полный URL-адрес изображения, например: action=query&titles=Image:INSERT_EXAMPLE_FILE_NAME_HERE.jpg&prop=imageinfo&iiprop=url

или для вычисления URL-адреса с помощью хеша имени файла .

К сожалению, в то время как массив изображений, возвращаемых prop=images находится в том порядке, в котором они найдены на странице, первое не может быть гарантировано изображением в информационном окне, потому что иногда страница будет содержать изображение перед инфобоксами (большинство значков времени для метаданных о странице: например, «эта статья заблокирована»).

Поиск массива изображений для первого изображения, включающего название страницы, вероятно, является лучшим предположением для изображения инфобокса.

Вы можете получить миниатюру любой страницы wikipedia, используя prop=pageimages . Например:

 http://en.wikipedia.org/w/api.php?action=query&titles=Al-Farabi&prop=pageimages&format=json&pithumbsize=100 

И вы получите полный URL-адрес эскиза.

Это хороший способ получить основное изображение страницы в википедии

http://en.wikipedia.org/w/api.php?action=query&prop=pageimages&format=json&piprop=original&titles=India

Способ 1: вы можете попробовать следующий запрос:

http://en.wikipedia.org/w/api.php?action=opensearch&limit=5&format=xml&search=italy&namespace=0

в ответе вы можете увидеть тег Image .

 <Item> <Text xml:space="preserve">Italy national rugby union team</Text> <Description xml:space="preserve"> The Italy national rugby union team represent the nation of Italy in the sport of rugby union. </Description> <Url xml:space="preserve"> http://en.wikipedia.org/wiki/Italy_national_rugby_union_team </Url> <Image source="http://img.ruphp.com/php/Italy_rugby.png/43px-Italy_rugby.png" width="43" height="50"/> </Item> 

Способ 2: использовать запрос http://en.wikipedia.org/w/index.php?action=render&title=italy

то вы можете получить необработанный html-код, вы можете заставить изображение использовать что-то вроде PHP Simple HTML DOM Parser http://simplehtmldom.sourceforge.net

У меня нет времени написать это вам. просто дайте вам несколько советов, спасибо.

Мне жаль, что я не ответил на ваш вопрос об основном изображении. Но вот некоторый код, чтобы получить список всех изображений:

 function makeCall($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); return curl_exec($curl); } function wikipediaImageUrls($url) { $imageUrls = array(); $pathComponents = explode('/', parse_url($url, PHP_URL_PATH)); $pageTitle = array_pop($pathComponents); $imagesQuery = "http://en.wikipedia.org/w/api.php?action=query&titles={$pageTitle}&prop=images&format=json"; $jsonResponse = makeCall($imagesQuery); $response = json_decode($jsonResponse, true); $imagesKey = key($response['query']['pages']); foreach($response['query']['pages'][$imagesKey]['images'] as $imageArray) { if($imageArray['title'] != 'File:Commons-logo.svg' && $imageArray['title'] != 'File:P vip.svg') { $title = str_replace('File:', '', $imageArray['title']); $title = str_replace(' ', '_', $title); $imageUrlQuery = "http://en.wikipedia.org/w/api.php?action=query&titles=Image:{$title}&prop=imageinfo&iiprop=url&format=json"; $jsonUrlQuery = makeCall($imageUrlQuery); $urlResponse = json_decode($jsonUrlQuery, true); $imageKey = key($urlResponse['query']['pages']); $imageUrls[] = $urlResponse['query']['pages'][$imageKey]['imageinfo'][0]['url']; } } return $imageUrls; } print_r(wikipediaImageUrls('http://en.wikipedia.org/wiki/Saturn_%28mythology%29')); print_r(wikipediaImageUrls('http://en.wikipedia.org/wiki/Hans-Ulrich_Rudel')); 

Я получил это для http://en.wikipedia.org/wiki/Saturn_%28mythology%29 :

 Array ( [0] => http://img.ruphp.com/php/Arch_of_SeptimiusSeverus.jpg [1] => http://img.ruphp.com/php/Ivan_Akimov_Saturn_.jpg [2] => http://img.ruphp.com/php/Lucius_Appuleius_Saturninus.jpg [3] => http://img.ruphp.com/php/Polidoro_da_Caravaggio_-_Saturnus-thumb.jpg [4] => http://img.ruphp.com/php/Porta_Maggiore_Alatri.jpg [5] => http://img.ruphp.com/php/She-wolf_suckles_Romulus_and_Remus.jpg [6] => http://img.ruphp.com/php/Throne_of_Saturn_Louvre_Ma1662.jpg ) 

И для второго URL ( http://en.wikipedia.org/wiki/Hans-Ulrich_Rudel ):

 Array ( [0] => http://img.ruphp.com/php/BmRKEL.jpg [1] => http://img.ruphp.com/php/BmRKELS.jpg [2] => http://img.ruphp.com/php/Bundesarchiv_Bild_101I-655-5976-04,_Russland,_Sturzkampfbomber_Junkers_Ju_87_G.jpg [3] => http://upload.wikimedia.org/wikipedia/commons/6/62/Bundeswehr_Kreuz_Black.svg [4] => http://upload.wikimedia.org/wikipedia/commons/9/99/Flag_of_German_Reich_%281935%E2%80%931945%29.svg [5] => http://img.ruphp.com/php/HansUlrichRudel.jpeg [6] => http://img.ruphp.com/php/Heinkel_He_111_during_the_Battle_of_Britain.jpg [7] => http://img.ruphp.com/php/Regulation_WW_II_Underwing_Balkenkreuz.png ) 

Обратите внимание, что URL-адрес немного изменился на 6-й элемент второго массива. Это то, о чем @JosephJaber предупреждал в своем комментарии выше.

Надеюсь, это поможет кому-то.

Я написал код, который получает основной образ (полный URL) по названию статьи в Википедии. Это не идеально, но в целом я очень доволен результатами.

Проблема заключалась в том, что при запросе на определенный заголовок Wikipedia возвращает несколько имен файлов изображений (без пути). Кроме того, вторичный поиск (я использовал код varatis, размещенный в этом потоке – спасибо!) Возвращает URL-адреса всех изображений, найденных на основе поиска файла изображения, который был просмотрен, независимо от исходного названия статьи. После всего этого мы можем получить общий образ, не имеющий отношения к поиску, поэтому мы отфильтровываем его. Код выполняет итерации по именам файлов и URL-адресам, пока не найдет (надеюсь, лучший) матч … немного сложнее, но он работает 🙂

Обратите внимание на общий фильтр: я составлял список родовых строк изображения для функции isGeneric (), но список просто продолжает расти. Я рассматриваю его как публичный список – если есть интерес, дайте мне знать.

Pre:

 protected static $baseurl = "http://en.wikipedia.org/w/api.php"; 

Основная функция – получить URL-адрес изображения из заголовка:

 public static function getImageURL($title) { $images = self::getImageFilenameObj($title); // returns JSON object if (!$images) return ''; foreach ($images as $image) { // get object of image URL for given filename $imgjson = self::getFileURLObj($image->title); // return first image match foreach ($imgjson as $img) { // get URL for image $url = $img->imageinfo[0]->url; // no image found if (!$url) continue; // filter generic images if (self::isGeneric($url)) continue; // match found return $url; } } // match not found return ''; } 

== Следующие функции вызывается главной функцией выше ==

Получить объект JSON (имена файлов) по названию:

 public static function getImageFilenameObj($title) { try // see if page has images { // get image file name $json = json_decode( self::retrieveInfo( self::$baseurl . '?action=query&titles=' . urlencode($title) . '&prop=images&format=json' ))->query->pages; /** The foreach is only to get around * the fact that we don't have the id. */ foreach ($json as $id) { return $id->images; } } catch(exception $e) // no images { return NULL; } } 

Получить объект JSON (URL) по имени файла:

 public static function getFileURLObj($filename) { try // resolve URL from filename { return json_decode( self::retrieveInfo( self::$baseurl . '?action=query&titles=' . urlencode($filename) . '&prop=imageinfo&iiprop=url&format=json' ))->query->pages; } catch(exception $e) // no URLs { return NULL; } } 

Отфильтруйте общие изображения:

 public static function isGeneric($url) { $generic_strings = array( '_gray.svg', 'icon', 'Commons-logo.svg', 'Ambox', 'Text_document_with_red_question_mark.svg', 'Question_book-new.svg', 'Canadese_kano', 'Wiki_letter_', 'Edit-clear.svg', 'WPanthroponymy', 'Compass_rose_pale', 'Us-actor.svg', 'voting_box', 'Crystal_', 'transportation_inv', 'arrow.svg', 'Quill_and_ink-US.svg', 'Decrease2.svg', 'Rating-', 'template', 'Nuvola_apps_', 'Mergefrom.svg', 'Portal-', 'Translation_to_', '/School.svg', 'arrow', 'Symbol_', 'stub', 'Unbalanced_scales.svg', '-logo.', 'P_vip.svg', 'Books-aj.svg_aj_ashton_01.svg', 'Film', '/Gnome-', 'cap.svg', 'Missing', 'silhouette', 'Star_empty.svg', 'Music_film_clapperboard.svg', 'IPA_Unicode', 'symbol', '_highlighting_', 'pictogram', 'Red_pog.svg', '_medal_with_cup', '_balloon', 'Feature', 'Aiga_' ); foreach ($generic_strings as $str) { if (stripos($url, $str) !== false) return true; } return false; } 

Комментарии приветствуются.

У меня есть способ надежно получить основной образ для страницы википедии – Расширение, называемое PageImages

Расширение PageImages собирает информацию об изображениях, используемых на странице.

Его цель – вернуть единственную наиболее подходящую миниатюру, связанную со статьей, пытаясь вернуть только содержательные изображения, например, не те из шаблонов обслуживания, заглушек или значков флагов. В настоящее время он использует первый бессмысленный образ, используемый на странице.

https://www.mediawiki.org/wiki/Extension:PageImages

Просто добавьте URL-адрес профайла в ваш запрос API:

 /w/api.php?action=query&prop=pageimages&titles=Somepage&format=xml 

Это надежно отфильтровывает раздражающие изображения по умолчанию и не позволяет вам фильтровать их самостоятельно! Расширение установлено на всех основных страницах википедии …

Ознакомьтесь с примером API MediaWiki для получения основного изображения страницы wikipedia: https://www.mediawiki.org/wiki/API:Page_info_in_search_results .

Как уже упоминалось, вы использовали prop=pageimages в своем запросе API.

Если вам также требуется описание изображения, вы должны использовать prop=pageimages|pageterms вместо этого в вашем запросе API.

Вы можете получить исходное изображение, используя piprop=original . Или вы можете получить уменьшенное изображение с указанной шириной / высотой. Для эскиза с шириной / высотой = 600, piprop=thumbnail&pithumbsize=600 . Если вы также опустите, изображение, возвращенное в обратном вызове API, по умолчанию будет иметь миниатюру с шириной / высотой 50 пикселей.

Если вы запрашиваете результаты в формате JSON, вы всегда должны использовать formatversion=2 в своем запросе API (т. format=json&formatversion=2 ), поскольку он упрощает извлечение изображения из запроса.

Оригинальный размер изображения:

 https://en.wikipedia.org/w/api.php?action=query&format=json&formatversion=2&prop=pageimages|pageterms&piprop=original&titles=Albert Einstein 

Размер миниатюры (ширина и высота 600 пикселей) Изображение:

 https://en.wikipedia.org/w/api.php?action=query&format=json&formatversion=2&prop=pageimages|pageterms&piprop=thumbnail&pithumbsize=600&titles=Albert Einstein 

См. Этот связанный вопрос в API для Википедии . Однако я не знаю, можно ли получить изображение миниатюр через API.

Вы также можете рассмотреть только синтаксический анализ веб-страницы, чтобы найти URL-адрес изображения и получить изображение таким образом.

Давайте возьмем Пример страницы http://en.wikipedia.org/wiki/index.html?curid=57570, чтобы получить главную картинку

Проверять, выписываться

проп = pageprops

действие = запрос & pageids = 57570 & проп = pageprops & формат = JSON

Результаты данных результатов.

 { "pages" : { "57570":{ "pageid":57570, "ns":0, "title":"Sachin Tendulkar", "pageprops" : { "defaultsort":"Tendulkar,Sachin", "page_image":"Sachin_at_Castrol_Golden_Spanner_Awards_(crop).jpg", "wikibase_item":"Q9488" } } } }} 

Вот мой список XPaths, который я нашел для 95% статей. основные из них – 1, 2 3 и 4. Многие статьи не отформатированы правильно, и это будут крайние случаи:

Вы можете использовать библиотеку разбора DOM для извлечения изображения с помощью XPath.

 static NSString *kWikipediaImageXPath2 = @"//*[@id=\"mw-content-text\"]/div[1]/div/table/tr[2]/td/a/img"; static NSString *kWikipediaImageXPath3 = @"//*[@id=\"mw-content-text\"]/div[1]/table/tr[1]/td/a/img"; static NSString *kWikipediaImageXPath1 = @"//*[@id=\"mw-content-text\"]/div[1]/table/tr[2]/td/a/img"; static NSString *kWikipediaImageXPath4 = @"//*[@id=\"mw-content-text\"]/div[2]/table/tr[2]/td/a/img"; static NSString *kWikipediaImageXPath5 = @"//*[@id=\"mw-content-text\"]/div[1]/table/tr[2]/td/p/a/img"; static NSString *kWikipediaImageXPath6 = @"//*[@id=\"mw-content-text\"]/div[1]/table/tr[2]/td/div/div/a/img"; static NSString *kWikipediaImageXPath7 = @"//*[@id=\"mw-content-text\"]/div[1]/table/tr[1]/td/div/div/a/img"; 

Я использовал обертку ObjC под названием Hpple вокруг libxml2.2, чтобы вытащить URL-адрес изображения. Надеюсь это поможет

Я думаю, что нет, но вы можете захватить изображение, используя HTML-документы с парсером ссылок

Как сказал Анурайдж, параметр pageimages – это. Посмотрите на следующий URL-адрес, который принесет некоторые изящные вещи:

 https://en.wikipedia.org/w/api.php?action=query&prop=info|extracts|pageimages|images&inprop=url&exsentences=1&titles=india 

Ее некоторые интересные параметры:

  • Два экстракта параметров и экстенты дают вам краткое описание, которое вы можете использовать. (exsentences – количество предложений, которые вы хотите включить в выдержку)
  • Параметры info и inprop = url дают URL-адрес страницы
  • Свойство prop имеет несколько параметров, разделенных символом штриха
  • И если вы вставляете туда формат = json , это еще лучше