Your browser doesn't support the features required by impress.mod.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

2018-10-04 | Potsdam ITUG2018
workshop: Webservices und TUSCRIPT

REQUEST and ACCESS

Webservices abfragen und Daten anreichern

☞ Use a spacebar or arrow keys to navigate.

Präsentation https://digicademy.github.io/2018_ITUG
Code https://github.com/digicademy/2018_ITUG
Thomas Kollatz | @kol_t @digicademy | Twitter digicademy | CC-BY 4.0

Skripte

Die Skripte zum Workshop sind als Segmente in der TUSTEP-Datei skripte hinterlegt. Zugleich wird eine Übungsdatei beispiel.xml bereitgestellt.

Inhaltsverzeichnis der Segmentdatei skripte:

#=  REQUEST        REQUEST DECODE
#=  REQUEST_GND1   REQUEST DARIAH-DE Webservice
#=  REQUEST_GND2   REQUEST DARIAH-DE Webservice mit QUERYSTRING-Liste
#=  ACCESS_VAR     REQUEST ACCESS/.../VARIABLE
#=  ACCESS_TEST    ACCESS: TRACE content of persName
#=  ACCESS_DICT    ACCESS: persname+GNDE-ID in Dictionary
#=  ACCESS_WRITE   ACCESS: persName @ref=GND-ID
#=  GEONAMES       REQUEST geonamesID

Arbeiten mit Segmentdateien

Anmelden der Segmentdatei auf Kommandoebene
#an,,skripte
Öffnen der Standard-Tustep-Editordatei tustep.edt
#e,-std-
Inhaltsverzeichnis der Segmentdatei im Editor anzeigen
h,skripte,?
Segment holen
h,skripte,request oderh,skripte,1
Segment ausführen
x, #ma,<editor>

Arbeiten mit definierter Segmentdatei

Anmelden der Segmentdatei auf Kommandoebene
#an,,skripte
Definieren der Segmentdatei
#de,skripte
Inhaltsverzeichnis einer definierten Segmentdatei anzeigen
#in,$
Ausführen eines Skripts aus einer definierten Segmentdatei
#$request

REQUEST (url)

$$ MODE TUSCRIPT,{}
url="http://www.itug.de"
daten=REQUEST (url)
daten=DECODE (daten,utf8)
TRACE *daten

Skript REQUEST

h,skripte,1

REQUEST (url)

$$ MODE TUSCRIPT,{}
url="https://ref.de.dariah.eu/pndsearch/pndquery.xql?ln=Kollatz,%20Thomas"
requestdaten=REQUEST (url)
requestdaten=DECODE (requestdaten,UTF8)
TRACE *requestdaten

Skript REQUEST_GND1

h,skripte,2

DARIAH-DE Normdatendienste
hier: Gemeinsame Normdatei

REQUEST (url,query)

$$ MODE TUSCRIPT,{}
url="https://ref.de.dariah.eu/pndsearch/pndquery.xql"

query=*
DATA ln=Kollatz, Thomas
query=ENCODE (query,cgi)

requestdaten=REQUEST (url,query)
requestdaten=DECODE (requestdaten,UTF8)
TRACE *requestdaten

Skript REQUEST_GND2

h,skripte,3

DARIAH-DE Normdatendienste
hier: Gemeinsame Normdatei

ACCESS/…/VARIABLE

$$ MODE TUSCRIPT,{}
name="Kollatz, Thomas"
url="https://ref.de.dariah.eu/pndsearch/pndquery.xql"

query=*
DATA ln={name}
query=ENCODE (query,cgi)

requestdaten=REQUEST (url,query)
requestdaten=DECODE (requestdaten,UTF8)

ACCESS rd: READ/STREAM/VARIABLE requestdaten s,a+t+e
 LOOP
  READ/EXIT rd
  IF (t.hn."link"&&t.ha."target") gndreferenz=GET_ATTRIBUTE (t,"target")
 ENDLOOP
ENDACCESS rd
PRINT "GNDREFERENZ von ",name,": ",gndreferenz

Skript ACCESS_VAR

h,skripte,4

ACCESS/STREAM

$$ MODE TUSCRIPT,{}
file="beispiel.xml"
ERROR/STOP OPEN (file,READ,-std-)

ACCESS f: READ/STREAM/UTF8 $file s,atag+content+etag,typ,stack,stack_num
 LOOP/9999999
  READ/EXIT f
  IF (atag.hn."persName"&&stack.ct." text ") TRACE *atag,content,etag,stack
 ENDLOOP
ENDACCESS/PRINT f

Skript ACCESS_TEST

h,skripte,5

Beispieldatei: beispiel.xml

Namen sammeln …

$$ MODE TUSCRIPT,{}
file="beispiel.xml"
ERROR/STOP OPEN (file,READ,-std-)

persNames=*
ACCESS f: READ/STREAM/UTF8 $file s,atag+content+etag,typ,stack,stack_num
 LOOP/9999999
  READ/EXIT f
  IF (atag.hn."persName"&&stack.ct." text ") persNames=APPEND(persnames,content)
 ENDLOOP
ENDACCESS/PRINT f
persNames=ALPHA_SORT (persnames), persNames=REDUCE (persnames)

Skript ACCESS_DICT

h,skripte,6

… GNDID ergänzen

DICT persnames CREATE

url="https://ref.de.dariah.eu/pndsearch/pndquery.xql"

LOOP person=persNames
 query=*
 DATA ln={person}
 query=ENCODE (query,cgi)
 requestdaten=REQUEST (url,query), requestdaten=DECODE (requestdaten,UTF8)
 ACCESS rd: READ/STREAM/VARIABLE requestdaten s,a+t+e,typ
  LOOP
   READ/QUIET/EXIT rd
   IF (t.hn."link"&&t.ha."target") THEN
    gndreferenz=GET_ATTRIBUTE (t,"target")
    DICT persnames ADD person,num,cnt,gndreferenz
   ENDIF
  ENDLOOP
 ENDACCESS rd
ENDLOOP

ERROR/STOP CREATE ("persnames.dict",seq-o,-std-)
DICT persnames UNLOAD/FILE "persnames.dict","###"

Datenanreicherung

$$ MODE TUSCRIPT,{}
file="beispiel.xml"
ziel="modified.xml"
ERROR/STOP OPEN (file,READ,-std-)
ERROR/STOP CREATE (ziel,FDF-o,-std-)

dict="persnames.dict"
ERROR/STOP OPEN (dict,READ,-std-)
DICT persnames CREATE
DICT persnames LOAD/FILE "persnames.dict","###"

ACCESS f: READ/STREAM/RECORDS/UTF8 $file s,atag+content+etag,typ,stack,stack_num
ACCESS z: WRITE/ERASE/STREAM/UTF8  $ziel s,atag+content+etag
 LOOP/9999999
  READ/EXIT f
  IF (atag.hn."persName"&&stack.ct." text ") THEN
   DICT persnames LOOKUP content,num,cnt,gndreferenz
   atag=SET_ATTRIBUTE (atag,"ref",gndreferenz)
  ENDIF
  WRITE z
 ENDLOOP
ENDACCESS/PRINT f
ENDACCESS/PRINT z

Skript ACCESS_WRITE

h,skripte,7

Quelle:
generiertes Ergebnis: modified.xml

Real World Example I

Real World Example II

geonames

$$ MODE TUSCRIPT,{}
townname="Potsdam"
url="http://api.geonames.org/search"

querystring=*
DATA name_equals={townname}
DATA country=DE
DATA continentCode=EU
DATA maxRows=10
DATA lang=de
DATA username=###
DATA featureCode=ADM3
query=ENCODE (querystring,cgi)

requestdaten=REQUEST (url,query)
requestdaten=DECODE (requestdaten,UTF8)

TRACE *requestdaten
ACCESS rd: READ/STREAM/VARIABLE requestdaten s,a+t+e
 LOOP
  READ/EXIT rd
   IF (a.hn."geonameId") geonameid=VALUE(t)
  ENDLOOP
ENDACCESS/PRINT rd
PRINT townname," has geonameId ",geonameid

Skript GEONAMES

h,skripte,8

F I N I S

סוף דבר הכל נשמע

Software & Webservices

Software

Webservices zu Personen

Software & Webservices

Webservices zu Orten
Webservices aufbereitet von DARIAH-DE