allegro-C V28.3

aiaqs

allegro Internet-Abrufe quer und schnell

Man braucht ja immer einen griffigen Namen für eine neue Sache... 
Sie wollen zuerst mal ganz schnell wissen, um was es geht? 
Dann geben Sie ein  `X vktest 0-85527-757-2` oder dasselbe mit einer anderen ISBN. Was Sie dann sehen, kommt quer über das Internet direkt aus der VK-Datenbank (es kann ein paar Sekunden dauern). Das ist nur ein ganz kleines Beispiel. Ein anderes: Geben Sie mal ein: 
x get Ihttp://www.biblio.tu-bs.de/db/plz/gp.php?plz=.....\sho IV
aber mit Ihrer Postleitzahl an der Stelle, wo ..... steht.

Der Browser `JanaS` ist eine brauchbare Ergänzung, wenn es um das direkte Anzeigen von Internet-Inhalten geht. Schwieriger wird es aber, wenn man eigentlich nicht ex
terne Inhalte im Dialog und mit copy&paste nutzen, sondern Daten irgendwo aus dem Internet abrufen und dann sofort per FLEX verwenden will, ohne a99/alcarta zu verlassen. Für so etwas wurde schon das Protokoll Z39.50 eingesetzt, das mit einem eigenen, externen Progamm zc.exe (plus z39.dll) genutzt werden kann. Dies geschieht z.B. in dem FLEX `z39.flx`. Damit kann man Datensätze per ISBN abfragen, aber nur Buchdaten und  nur von Servern, die das Protokoll anbieten und eine brauchbare Ausgabe damit liefern. Diese Methodik ist zudem recht komplex. 
Man wünscht sich mehr Einfachheit, aber zugleich viel mehr Funktionen und Ausbaufähigkeit! Zum einen will man auch statische Dateien, z.B. simple Textdateien, statt von der eigenen Platte von fremden Servern problemlos lesen können, zum andern will man beliebige Datenbankabfragen, die typischerweise über dynamische URLs laufen (z.B. mit .pl, .php oder .py) quer durchs Internet - d.h. ohne Zwischenschalten eines Browsers - direkt und schnellstmöglich vereinnahmen und im FLEX weiterverarbeiten können. In richtigen Programmiersprachen kann man solche Dinge längst mit links machen. Ab V28.3 gibt es dafür in FLEX ein paar kleine Erweiterungen bei vier Befehlen (wir wollen nicht so weit gehen und gleich ganz hochtrabend von Web a.99 reden): 

get Iurl   oder fast gleichwertig  var Furl
Das ist sehr direkt und bequem. Damit holt man sich eine Datei, die irgendwo im Internet unter einer irgendeiner URL liegt, unmittelbar in die interne Variable, als wäre es eine Textdatei auf dem eigenen System (das ging ja bisher schon mit var Fdateiname). Am besten eignen sich dafür ASCII-Dateien, HTML weniger, .PDF und .JPG gar nicht wegen der darin enthaltenen Steuercodes. Die Größe ist auf 4 MB begrenzt. 
Geben Sie zum Testen mal ein: 
   x get Iftp://sun250.biblio.etc.tu-bs.de/pub/help/aoz.txt\sho IV 
oder auch: 
    H marc.rtf
Was Sie dann sehen, kommt vom FTP-Server aus Braunschweig. 
(Eingebaut in onerror.flx ist, daß H ... einen Abruf der Datei vom FTP-Server macht.) 

Hinweis: Beim Befehl  get Iurl  kann man mit if no ... checken, ob die Datei zu groß war, bei  var Furl  geht das nicht. 
Aber es gibt noch mehr: 

open url  
Damit öffnet man eine URL (egal ob statisch oder dynamisch) und kann 
anschließend mit  get  zeilenweise und mit  fetch number  blockweise daraus lesen. 

Die Kombination von open url  und  fetch number  (in einer Schleife) macht es dann möglich, daß man sich beliebig große Dateien und Datenbankinhalte beliebigen Typs quer durchs Internet schnell mal eben auf das eigene System holen kann. Wie das genau geht, kann man in dem FLEX  `fetchfil.flx`  studieren und für eigene Zwecke modifizieren. Klappen sollte es mit jeder Datei, die mit einer Adresse der Form http://... oder ftp://... per Browser abgerufen werden kann, also auch PDF oder JPG usw. Man hat die Datei anschließend sofort auf dem eigenen Arbeitsverzeichnis. Geben Sie also einfach mal ein:  
X fetchfil, und dann irgendeine URL. 

Anwendungsbeispiel "Fernkatalog" - Zugriff aus a99 auf entfernte Kataloge 
Mit "Fernkatalog" (Abk. "vk") ist eine über avanti erreichbare Datenbank irgendwo im Internet gemeint. 
Damit man die Möglichkeiten an Beispielen studieren kann, wurden einige ganz kleine FLEXe geschrieben, mit denen man in den Registern z.B. des VK blättern und Datensätze daraus abfragen kann. Dazu gehören auch einige wenige PHP-Dateien auf seiten des Servers, die aber weitaus einfacher und viel kleiner sind, als diejenigen, die für den normalen Browserzugriff gebraucht werden. Mit `X vks` können Sie die Sache sofort ausprobieren. Die vier FLEXe sind diese: 
`vks.flx` : Start, Wahl des Registers und Eingabe des Suchbegriffs. Ruft dann vkr.flx auf: 
`vkr.flx `: Registerabschnitt vom VK holen und daraus eine RTF-Datei mit Flips machen, die vkf starten: 
`vkf.flx` : Holt Datensätze mit einem find-Befehl und zeigt sie an (avanti liefert sie im A-Format) 
`vkisbn.flx `: Holt einen Datensatz direkt über ISBN-Abfrage 
Der komplizierteste davon, aber auch nicht sehr lang, ist vkr.flx. Damit kann man nun, wesentlich einfacher als per Z39, den VK nochmal auf neue Art ausbeuten. Oder einen anderen Fernkatalog, denn die FLEXe sind universell. 

Wie gesagt, ein Beispiel! Diese Sache soll nicht etwa nun als neuer, offizieller VK-Zugang etabliert und angepriesen werden, sondern exemplarisch zeigen, was man machen kann und wie es geht. Diese FLEXe und die zugehörigen PHP-Dateien sind so einfach wie möglich gestaltet und ausführlich kommentiert, um den Einstieg und beliebigen Ausbau zu erleichtern. 

Liste der Dateien

Ausbaufähiges Minimalmodell einer Web-Anbindung für Zugriff aus a99 direkt auf einen Fernkatalog ohne Browser. 
Man braucht folgende Programme und Dateien 
(* heißt, daß man darin etwas anpassen muß) 

1. Webserver (meistens Apache) mit PHP 

2. avanti-Server 
 * avanti.conf   mit Eintrag fuer die Datenbank 
   (darin steht, wo sich die Datenbank wirklich befindet) 

3. PHP-Skripte auf einem Verz. des Webservers 
 * av_mini.php    Darin symb. Name der Datenbank wie in avanti.conf 
                  sowie user/passwd (Var. $DB und $ID) und Kernfunktionen

   Die folgenden drei werden von den gleichnamigen FLEXen gestartet: 
         (gleicher Name nur wegen Übersichtlichkeit, nötig ist es nicht) 
   vks.php        Liefert Liste der symb. Registernamen zur Auswahl 
   vkr.pgp        besorgt Auszüge aus den Registern
   vkf.php        Sendet find-Befehl an Datenbank und nimmt Ergebnisse an, 
                    macht Gebrauch von: 
   av_find.php    Unterprog. zum Suchen und Exportieren von Ergebnissen 
   av_core.php    wird von av_find eingebunden 
                  (av_core.php wird von allen av_*.php gebraucht)

   vktest.php     Minimales Beispiel als Vorlage f. eigene Funktionen

4. FLEXe   auf dem DbDir von a99, wo man die Sache benutzen will 
 * vks.flx        hierin steht die Basis-URL (Variable $Url) der Datenbank 
                  Kopieren, wenn man mehrere Fernkataloge nutzen will 
                  Holt mit vks.php die Liste der Register und startet dann: 

   vkr.flx        Registerausschnitt holen, prod. vkr.rtf mit Flips 
                  Jeder Flip startet dann: 
   vkf.flx        find-Befehl mit Export 

   vkisbn.flx     Spezialfall von vkf: Holt Satz mit ISBN 
   vktest.flx     Minimales Beispiel als Vorlage f. eigene Funktionen, 
                       ruft vktest.php auf

5. Parameter (auf dem Datenbank-Verz., wo avanti zugreift) 
 * e-alleg.xpr  (Ausgabe mit Kategorienummern, normalerweise e-1.apr) 

Vollständiges, kleinstmögliches Beispiel 
Die Dateien vktest.flx und vktest.php sind im Paket enthalten. Hier sind sie vollständig abgebildet mit farblichen Hervorhebungen, damit man alle Einzelheiten überblicken kann. Diese zwei Dateien eignen sich als Vorlagen, wenn man einfache aiaqs-Anwendungen schnell zusammenstellen will. Dazu sind in der Regel nur die in türkis  hervorgehobenen Teile durch eigene Befehle zu ersetzen. Man kann es aber auch, so wie es ist, mit dem eigenen a99 sofort testen, denn die Voraussetzungen auf Seiten der VK-Datenbank sind gegeben. Geben Sie zum Testen ein:  `X vktest 3-464-00630-1` oder eine andere ISBN. Etwas mehr als dies macht der FLEX vkisbn.flx.

vktest.flx
  VKTEST.FLX : Demonstration und Test der aiaqs-Technik 
  2008-05-23   startet auf dem Webserver  vktest.php 

  Aufruf sieht so aus: z.B.  X vktest 0-85527-757-2 
  Die eingegebene ISBN in $isb sichern 
ins $isb

  Dies ist die Basis-URL 
$URL=http://www.biblio.tu-bs.de/db/vk/

  Fehler abfangen 
if $isb jump begin 
mes Ohne ISBN geht's nicht 
end 
   Kernstück beginnt hier
:begin 
  dynamische URL zusammenbasteln, 
    vktest.php ist aufzurufen mit der ISBN als Wert 

var $URL "vktest.php?isb=" $isb
  und die Daten abrufen 
get I 
  Output des Auftrags steht jetzt in iV zu beliebiger Verwendung

  Codierung ist ASCII, zwecks Anzeige umcodieren 
ansi 
show IV 
  Wenn nicht gefunden, dann kommt die Zeichenfolge "E130>" vor 
if %E130>% mes ISBN im VK nicht gefunden;end 

vktest.php
<?php  //   vktest.php : einfaches aiaqs-Beispiel 
       //   2008-05-23   wird aufgerufen aus vktest.flx 

include_once("av_mini.php");  // Einstellungen, Grundfunktionen 

// Variablen uebernehmen aus dem Aufruf, z.B. 
//    http://www.biblio.tu-bs.de/db/vk/vktest.php?isb=0-85527-757-2 

$nummer = getval('isb');   // ISBN 

// ------------------ Job ------------------------ 
// besteht aus FLEX-Befehlen, die ein array bilden 

$auftrag = array( 
"switch coding 0", 
"var 'isb $nummer'", 
"find", 
"if not error wri 'Der Titel zur ISBN $nummer ist: ' #331 n", 
"end"
);    // ------------------ Job ENDE ---------- 

// Job senden (jetzt enthalten in dem array $auftrag) 

$k = exjob($auftrag, $output);  //  Funktion exjob ist in av_mini.php 

  // Ergebnisse stehen jetzt als Zeilen-Array in $output, $k=Zeilenzahl 
  // Nun kann man die Ergebnisse mit PHP beliebig verarbeiten 

$k=sizeof($output);  // Anzahl Zeilen 
// Fehlermeldung? Dann steht "kein Erg" in der ersten Zeile 

if($k<1 || strstr($output[0],"kein Erg")) 
  { echo "Sorry, no result!\n" .$output[0] ."\n"; return; } 

// Jetzt Daten wirklich senden 

sendback($output);  //  Funktion sendback() ist in av_mini.php 
?> 

Manuell in a99 aufrufen 
Wer will, kann jedes PHP-Skript auch manuell aufrufen! Man muß dazu den Befehl 
get Iurl 
verwenden und alle Variablen mit angeben. Das geht z.B. so: 

x get Ihttp://www.biblio.tu-bs.de/db/vk/vktest.php?isb=0-85527-757-2\ansi\sho IV 

?z39.flx=h fleximp=ZDirect 
?fetchfil.flx=h fetchfil.flx 
?X vks=X vks 
?vks.flx=h vks.flx 
?vkr.flx =h vkr.flx 
?vkf.flx=h vkf.flx 
?vkg.flx =h vkg.flx 
?JanaS=x janas janas.htm 
?X vktest 0-85527-757-2=X vktest 0-85527-757-2 
?X vktest 3-464-00630-1=X vktest 3-464-00630-1