Aller au contenu

Module:Liens VizieR

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 14 avril 2019 à 14:07 et modifiée en dernier par Florn88 (discuter | contributions) (liens directs). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 Documentation[voir] [modifier] [historique] [purger]

Utilisation

Fonctions exportables :

  • VizieR(frame) – retourne une liste de liens vers la base de catalogues d'étoiles VizieR du Centre de données astronomiques de Strasbourg. Les références dans les différent catalogues peuvent être transmis au modèle, ou récupérés sur Wikidata (paramètre entity pour tester sur une autre page)

Autres fonctions :

  • getP528( entity ) – retourne une liste de chaine correspondant aux valeurs de la propriété P528 de l'élément wikidata entity.
  • findInList( str, list ) – retourne le premier élément de list commençant par str (mot entier) ainsi que le complément de str.

Modules externes et autres éléments dont ce module a besoin pour fonctionner :

Exemples

p.VizieR{ entity = 'Q14265' } retourne : Erreur de script : la fonction « VizieR » n’existe pas.

local p = {}
local Outils = require( 'Module:Outils' )

local baseUrl = 'http://vizier.u-strasbg.fr/viz-bin/VizieR-S?'
local catalogList = {
	{ name = 'V*', page = "General Catalogue of Variable Stars" },
	{ name = 'VStar', page = "General Catalogue of Variable Stars" },
	{ name = 'ADS', page = "Catalogue d'étoiles doubles Aitken" },
	{ name = 'AG', page = "Catalogue AGK" },
	{ name = 'BD', page = "Bonner Durchmusterung" },
	{ name = 'CCDM', page = "Catalogue des composantes d'étoiles doubles et multiples" },
	{ name = 'CD', page = "Córdoba Durchmusterung" },
	{ name = 'CPD', page = "Cape Photographic Durchmusterung" },
	{ name = 'DENIS' },
	{ name = 'FK5', page = "Fundamental Katalog" },
	{ name = 'G', page = "Catalogue Giclas" },
	{ name = 'GC', page = "Catalogue général de Boss" },
	{ name = 'GJ', page = "Catalogue Gliese" },
	{ name = 'HD', page = "Catalogue Henry Draper" },
	{ name = 'HIC' },
	{ name = 'HIP', page = "Catalogue Hipparcos" },
	{ name = 'HR', page = "Catalogue HR" },
	{ name = 'IRAS', page = "Infrared Astronomical Satellite" },
	{ name = 'LHS', page = "Catalogues Luyten#Catalogue LHS" },
	{ name = 'LSPM' },
	{ name = '2MASS', page = "Two-Micron All-Sky Survey" },
	{ name = 'NLTT', page = "Catalogues Luyten#Catalogue NLTT" },
	{ name = 'NSV' },
	{ name = 'PPM' },
	{ name = 'PSR' },
	{ name = 'SAO', page = "Catalogue SAO" },
	{ name = 'TYC', page = "Catalogue Tycho" },
	{ name = 'UCAC2' },
	{ name = 'USNO-B1.0', page = "Catalogue d'étoiles#Catalogues USNO" },
	{ name = 'WDS', page = "Catalogue d'étoiles doubles de Washington" },
}

local function getP528( entity )
	local result = {}
	if type( entity ) == 'table' and
		type( entity.claims ) == 'table' and
		type( entity.claims.P528 ) == 'table'
	then
		local p528 = entity.claims.P528
		for i = 1, #p528 do
			local snack = p528[i]
			if type( snack ) == 'table' and
				snack.type == 'statement' and
				type( snack.mainsnak ) == 'table' and
				snack.mainsnak.snaktype== 'value' and
				snack.mainsnak.datatype == 'string' and
				type( snack.mainsnak.datavalue ) == 'table' and
				Outils.trim( snack.mainsnak.datavalue.value )
			then
				table.insert( result, snack.mainsnak.datavalue.value )
			end
		end
	end
	return result
end

local function findInList( str, list )
	str = str:gsub('([$%%()*+%-.?()%[%]^])', '%%%1')	-- escape magic characters
	for i = 1, #list do
		if list[i]:find( '^' .. str .. '(%W)' ) then
			local text = Outils.trim( list[i]:gsub('^' .. str, '' ) )
			return list[i], text
		end
	end
end

function p.VisieR( frame )
	local args = Outils.extractArgs( frame )
	local entity = mw.wikibase.getEntity( Outils.trim( args.entity ) )
	local wikidataList = getP528( entity )
	local resultList = {}
	for i = 1, #catalogList do
		catalog = catalogList[i].name
		local ref, text = findInList( catalog, wikidataList )
		if Outils.trim( args[catalog] ) then
			text = args[catalog]
			if args[catalog]:sub( 1, 1 ) == '+' then
				ref = catalog .. args[catalog]
			else
				ref = catalog .. ' ' .. args[catalog]
			end
		end
		if ref then
			local name
			if catalogList[i].page then
				name = '[[' .. catalogList[i].page .. '|' .. catalog .. ']]'
			else
				name = catalog
			end
			local url = ' : [' .. baseUrl .. mw.uri.encode( ref, 'PATH' ) .. ' ' .. text .. ']'
			table.insert( resultList, '* ' .. name .. url )
		end
	end
	return table.concat( resultList, '\n' )
end

return p