You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

82 lines
2.5 KiB

<?php
function ajax_wikipedia ($param) {
if (preg_match("/^([^:]+):(.*)$/", $param['page'], $m)) {
$wp_lang = $m[1];
$wp_page = $m[2];
}
elseif (preg_match("/^Q\d+$/", $param['page'])) {
$data = wikidataLoad($param['page']);
if (array_key_exists('sitelinks', $data)) {
$sitelinks_ids = array_keys($data['sitelinks']);
$sitelinks_ids = array_values(array_filter($sitelinks_ids, function ($id) {
return preg_match('/wiki$/', $id) && $id !== 'commonswiki';
}));
if (array_key_exists($param['lang'] . 'wiki', $data['sitelinks'])) {
$wp_lang = $param['lang'];
$wp_url = $data['sitelinks'][$param['lang'] . 'wiki']['url'];
}
elseif (array_key_exists('enwiki', $data['sitelinks'])) {
$wp_lang = 'en';
$wp_url = $data['sitelinks']['enwiki']['url'];
}
elseif (sizeof($sitelinks_ids)) {
$id = $sitelinks_ids[0];
$wp_lang = substr($id, 0, strlen($id) - 4);
$wp_url = $data['sitelinks'][$id]['url'];
}
else {
$content = "<div><div id='mw-content-text'><div><p>" . wikidataFormat($param['page'], $param['lang']) . "</p></div></div></div>";
$url = "https://wikidata.org/wiki/{$param['page']}";
if (array_key_exists('commonswiki', $data['sitelinks'])) {
$url = $data['sitelinks']['commonswiki']['url'];
}
return array(
'content' => $content,
'languages' => [
$param['lang'] => $url,
],
'language' => $param['lang'],
);
}
}
}
if (!isset($wp_lang) || !(isset($wp_page) || isset($wp_url))) {
return false;
}
if (!isset($wp_url)) {
$wp_url = "https://{$wp_lang}.wikipedia.org/wiki/" . urlencode(strtr($wp_page, array(" " => "_")));
}
$content = file_get_contents($wp_url);
$langList = array($wp_lang => $wp_url);
$dom = new DOMDocument();
$dom->loadHTML($content);
$langDiv = $dom->getElementsByTagName('li');//interlanguage-link interwiki-bar');
for ($i = 0; $i < $langDiv->length; $i++) {
$li = $langDiv->item($i);
if (preg_match('/^interlanguage-link interwiki-([a-z\-]+)( .*|)$/', $li->getAttribute('class'), $m)) {
$a = $li->firstChild;
$langList[$m[1]] = $a->getAttribute('href');
}
}
if ($wp_lang !== $param['lang'] && array_key_exists($param['lang'], $langList)) {
$content = file_get_contents($langList[$param['lang']]);
$wp_lang = $param['lang'];
}
return array(
'content' => $content,
'languages' => $langList,
'language' => $wp_lang,
);
}