Funktion

Es werden alle Artikel aus einem Namensraum namespace identifiziert, die eine Vorlage template verwenden. namespace=0 entspricht dem Artikelnamensraum, also den “normalen” Wikipedia-Artikeln. Eine Dokumentation der Namensräume findet sich hier: http://www.mediawiki.org/wiki/Manual:Namespace. Eine Dokumentation der Parameter für den API Aufruf GET(..., query=list(...)) findet sich hier: https://www.mediawiki.org/wiki/API:Query#Generators.

f_get_templatepages = function(template, language="de", eilimit = 500, einamespace = 0) {
  domain = paste0("http://", language, ".wikipedia.org/w/api.php") #URL der API einer Wikipedia-Sprachversion
  dmp = GET(domain, query=list( #Konstruktion des API Aufrufs
    format = "json",
    action = "query",
    list = "embeddedin",
    eititle = template, #muss "Vorlage:" oder "Template:", etc. enthalten!
    einamespace = einamespace,
    eilimit = eilimit))
  dmp = content(dmp, as = "text") #Abruf des Ergebnisses der API Abfrage
  dmp = RCurl:::mapUnicodeEscapes(dmp) #Codierung der Unicode Escape Characters
  dmp = fromJSON(dmp) #Umwandlen des json Objekts in R kompatible Daten
  templatepages = dmp$query$embeddedin ##Auswahl des relevanten data.frame
  if(is.null(templatepages$redirect)) templatepages$redirect = NA
  # Die API gibt in einem Aufruf "eilimit" (maximal 500) Seiten zurück. Wenn es weitere Seiten gibt, wird ein Code geliefert, der angibt, wo ein weiterer Abruf beginnen muss. So lange ein solcher Code zurückgegeben wird, führen wir weitere Abrufe aus, bis alle Seiten gesammelt wurden.
  while (!is.null(dmp$"query-continue"$embeddedin$eicontinue)) {
    dmp = GET(domain, query=list(
      format = "json",
      action = "query",
      list = "embeddedin",
      eititle = template,
      einamespace = einamespace,
      eicontinue = dmp$"query-continue"$embeddedin$eicontinue,
      eilimit = eilimit))
    dmp = content(dmp, as = "text")
    dmp = RCurl:::mapUnicodeEscapes(dmp)
    dmp = fromJSON(dmp)
    if(is.null(dmp$query$embeddedin$redirect)) dmp$query$embeddedin$redirect = NA
    templatepages = rbind(templatepages, dmp$query$embeddedin) # Neu abgerufene Seiten zu bisher abgerufenen Seiten hinzufügen
  }
  templatepages #Ausgabe eines data.frame mit allen Seiten
}

Anwendung

Die Funktion liefert einen data.frame mit ID, Namensraum und Titel der Seite sowie der Information, ob die Seite nur eine Weiterleitung auf eine andere Seite ist.

sample.gshtshws = f_get_templatepages("Vorlage:Gesundheitshinweis", language = "de", einamespace = 0)
head(sample.gshtshws)
##   pageid ns                                     title redirect
## 1    130  0 Außenbandruptur des oberen Sprunggelenkes     <NA>
## 2    212  0                                Ergotismus     <NA>
## 3    258  0                                  Allergie     <NA>
## 4    301  0                                      Auge     <NA>
## 5    318  0                                 Adrenalin     <NA>
## 6    422  0                                   Aszites     <NA>
nrow(sample.gshtshws) #Zahl der Artikel
## [1] 9155