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
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,
|
|
);
|
|
}
|