stamboomforum

Forum logoFora » FamilySearch en Zoekakten » XMLs van familysearch met URLs van images

Door de URLs te bekijken die familysearch stuurt heb ik ontdekt hoe je afbeeldingen zou kunnen downloaden.

Dit is de URL voor de lijst van provincies:

http://pilot.familysearch.org/recordsearch/v1/collection/fs:1831469/waypoint/0?disableNoCache=true&start=0&rows=2147483647&cb=1280121765806&noHttpError=true

Het resultaat is een XML-bestand:

<?xml version="1.0" ?>
<recordsearch xmlns:ns3="http://api.familysearch.org/authorities/v1" xmlns="http://api.familysearch.org/recordsearch/v1" xmlns:fsapi-v1="http://api.familysearch.org/v1" statusMessage="OK" statusCode="200">
    <waypoint start="0" rows="2147483647" leaf="false" id="0" childCount="5">
        <name>&lt;unspecified&gt;</name>
        <childrenLevel>
            <name>Province</name>
            <description>Select province</description>
        </childrenLevel>
        <children>
            <waypoint row="0" leaf="false" id="5448691" childCount="160">
                <name>Noord-Holland</name>
            </waypoint>
            <waypoint row="1" leaf="false" id="5448692" childCount="59">
                <name>Overijssel</name>
            </waypoint>
            <waypoint row="2" leaf="false" id="5448693" childCount="87">
                <name>Utrecht</name>
            </waypoint>
            <waypoint row="3" leaf="false" id="5448694" childCount="120">
                <name>Zeeland</name>
            </waypoint>
            <waypoint row="4" leaf="false" id="5448695" childCount="3">
                <name>Zuid-Holland</name>
            </waypoint>
        </children>
    </waypoint>
</recordsearch>

Dit is de URL voor alle plaatsen van Noord-Holland:

http://pilot.familysearch.org/recordsearch/v1/collection/fs:1831469/waypoint/5448691?start=0&rows=2147483647&noHttpError=true&cb=1280120457517&disableNoCache=true

Overijssel:

http://pilot.familysearch.org/recordsearch/v1/collection/fs:1831469/waypoint/5448692?disableNoCache=true&start=0&rows=2147483647&cb=1280121926868&noHttpError=true

Utrecht:

http://pilot.familysearch.org/recordsearch/v1/collection/fs:1831469/waypoint/5448693?start=0&rows=2147483647&noHttpError=true&cb=1280121553205&disableNoCache=true

Zeeland:

http://pilot.familysearch.org/recordsearch/v1/collection/fs:1831469/waypoint/5448694?start=0&rows=2147483647&noHttpError=true&cb=1280121586720&disableNoCache=true

Zuid-Holland:

http://pilot.familysearch.org/recordsearch/v1/collection/fs:1831469/waypoint/5448695?start=0&rows=2147483647&noHttpError=true&cb=1280121601118&disableNoCache=true

Duidelijk is dat het ID uit de eerste XML de WAYPOINT uit de URL voor de tweede is.

Ik neem als voorbeeld Noord-Holland. Dit is een deel van de inhoud van de XML met alle plaatsen van Noord-Holland:

<recordsearch statusMessage="OK" statusCode="200">
    <waypoint start="0" rows="2147483647" leaf="false" id="5448691" childCount="160">
        <name>Noord-Holland</name>
        <level>
            <name>Province</name>
            <description>Select province</description>
        </level>
        <childrenLevel>
            <name>Municipality</name>
            <description>Select municipality</description>
        </childrenLevel>
        <children>
...
            <waypoint row="43" leaf="false" id="5449643" childCount="1">
                <name>Groet</name>
            </waypoint>
            <waypoint row="44" leaf="false" id="5449646" childCount="9">
                <name>Grootebroek</name>
            </waypoint>
            <waypoint row="45" leaf="false" id="5449649" childCount="1">
                <name>Grosthuizen</name>
            </waypoint>
...
        </children>
</waypoint>
</recordsearch>

Als voorbeeld is dit de URL voor Grootebroek:

http://pilot.familysearch.org/recordsearch/v1/collection/fs:1831469/waypoint/5449646?start=0&rows=2147483647&noHttpError=true&cb=1280120488315&disableNoCache=true

De ID van Grootebroek uit de XML met plaatsnamen is 5449646. Die zie je weer in de URL voor de bronnen in Grootebroek. De rest van de URL lijkt bij alle plaatsen steeds hetzelfde.

Dit is de inhoud van het bestand voor Grootebroek:

<?xml version="1.0" ?>
<recordsearch xmlns:ns3="http://api.familysearch.org/authorities/v1" xmlns="http://api.familysearch.org/recordsearch/v1" xmlns:fsapi-v1="http://api.familysearch.org/v1" statusMessage="OK" statusCode="200">
    <waypoint start="0" rows="2147483647" leaf="false" id="5449646" childCount="9">
        <name>Grootebroek</name>
        <level>
            <name>Municipality</name>
            <description>Select municipality</description>
        </level>
        <childrenLevel>
            <name>Record Type and Years</name>
            <description>Select record type and years</description>
        </childrenLevel>
        <crumbs>
            <waypoint leaf="false" id="5448691" childCount="160">
                <name>Noord-Holland</name>
                <level>
                    <name>Province</name>
                    <description>Select province</description>
                </level>
            </waypoint>
        </crumbs>
        <children>
            <waypoint row="0" leaf="true" id="5453191" childCount="487">
                <name>Geboorten 1841-1867</name>
            </waypoint>
            <waypoint row="1" leaf="true" id="5453192" childCount="447">
                <name>Geboorten 1843-1867</name>
            </waypoint>
            <waypoint row="2" leaf="true" id="5453193" childCount="334">
                <name>Geboorten 1868-1882</name>
            </waypoint>
            <waypoint row="3" leaf="true" id="5453194" childCount="320">
                <name>Huwelijken 1811-1850</name>
            </waypoint>
            <waypoint row="4" leaf="true" id="5453195" childCount="361">
                <name>Huwelijken 1843-1882</name>
            </waypoint>
            <waypoint row="5" leaf="true" id="5453196" childCount="334">
                <name>Overlijden 1811-1834</name>
            </waypoint>
            <waypoint row="6" leaf="true" id="5453197" childCount="435">
                <name>Overlijden 1835-1864</name>
            </waypoint>
            <waypoint row="7" leaf="true" id="5453198" childCount="622">
                <name>Overlijden 1843-1882</name>
            </waypoint>
            <waypoint row="8" leaf="true" id="5453199" childCount="554">
                <name>Tienjarige tafels 1811-1840 Geboorten 1811-1840</name>
            </waypoint>
        </children>
    </waypoint>
</recordsearch>

Als ik dan in Grootebroek kies voor de "Tienjarige tafels 1811-1840 Geboorten 1811-1840", is dit de URL:

http://pilot.familysearch.org/recordsearch/v1/collection/fs:1831469/waypoint/5453199?start=0&rows=2147483647&noHttpError=true&cb=1280120631857&disableNoCache=true

Opnieuw zie je dat de ID 5453199 voor de tafels uit het bestand voor Grootebroek de WAYPOINT uit de URL voor tafels is.

Dit is een stukje uit de XML voor de tafels:

<?xml version="1.0" ?>
<recordsearch xmlns:ns3="http://api.familysearch.org/authorities/v1" xmlns="http://api.familysearch.org/recordsearch/v1" xmlns:fsapi-v1="http://api.familysearch.org/v1" statusMessage="OK" statusCode="200">
    <waypoint start="0" rows="2147483647" leaf="true" id="5453199" childCount="554">
        <name>Tienjarige tafels 1811-1840 Geboorten 1811-1840</name>
        <level>
            <name>Record Type and Years</name>
            <description>Select record type and years</description>
        </level>
        <crumbs>
            <waypoint leaf="false" id="5448691" childCount="160">
                <name>Noord-Holland</name>
                <level>
                    <name>Province</name>
                    <description>Select province</description>
                </level>
            </waypoint>
            <waypoint leaf="false" id="5449646" childCount="9">
                <name>Grootebroek</name>
                <level>
                    <name>Municipality</name>
                    <description>Select municipality</description>
                </level>
            </waypoint>
        </crumbs>
        <waypointImages>
...
            <waypointImage row="21" provenanceOrder="21" current="false">
                <image href="https://das.familysearch.org/das/v1/dgs:004537506.004537506_00022/$dist" external="false"/>
            </waypointImage>
            <waypointImage row="22" provenanceOrder="22" current="false">
                <image href="https://das.familysearch.org/das/v1/dgs:004537506.004537506_00023/$dist" external="false"/>
            </waypointImage>
            <waypointImage row="23" provenanceOrder="23" current="false">
                <image href="https://das.familysearch.org/das/v1/dgs:004537506.004537506_00024/$dist" external="false"/>
            </waypointImage>
...
        </waypointImages>
    </waypoint>
</recordsearch>

De <image>-tags bevatten een href-waarde en dat is precies de image die wordt opgehaald.

Een afbeelding met de voorkant van een archiefdeel (veel zwart, maakt een kleiner bestand) is 4000 x 2000 pixels en ruim 200 KB. Een afbeelding uit het midden van het boek met geschreven tekst op een witte pagina is 4600 x 4000 pixels en ruimt 2 MB.

Je kunt met een klein scriptje dus alle bestanden van een plaats downloaden. Je zou zelfs alle images kunnen downloaden als je wil. De tienjarige tafels van Grootebroek zijn echter al bijna 1 GB. En als ze merken dat hun images massaal gedownload worden, zouden ze de structuur kunnen veranderen. (Hoewel, ik neem aan dat ze sowieso al populair zijn, dus er wordt al veel gedownload.)

Anyway, ik denk dat een paar van ons dit wel leuk zou vinden om er eens mee te testen. Het zou het indexeren een stuk sneller maken, want de site van familysearch is regelmatig erg traag...

Succes,

Jerry

Jerry van Kooten

Ik ben bang dat het verhaal hier voor de meeste onder ons abacadabra is, ikzelf begrijp wel wat je bedoelt maar heb er totaal geen kaas van gegeten een werkend script te maken.

 

Als er een script bestaat wil ik best meewerken om e.e.a. uit te proberen en kijken of het inderdaad mogelijk is om alle afbeeldingen van een plaats in 1 keer te downloaden.

 

M.vr.gr.

 

Leo Terlouw

Leo Terlouw

 

Het downloaden van een reeks bestanden met volgnummer kan gemakkelijk met cURL. Je moet wel de naam van de eerste afbeelding van de reeks weten, en ook het aantal afbeeldingen in die reeks. Dit kun je bepalen op de manier die Jerry aangeeft, of je kunt de naam bepalen op de manier die door FamilySearch zelf wordt aangegeven (m.b.v. Firebug). (Met dank aan Jo Pol voor de link.) Ik ben hiermee begonnen, omdat ik helaas heb gemerkt dat bronnen vaak weer gauw van internet verdwijnen, en omdat mijn onderzoek zich in een relatief klein gebied bevindt, dus is een vrij groot deel van de akten "nuttig" voor mij.

cURL roep je als volgt aan vanaf de command line:

curl "https://das.familysearch.org/das/v1/dgs:004572322.004572322_[00001-00542]/%24dist" -o wsl_o18691882_#1.jpg

Opmerkingen:

  • Het deel [00001-00542] geeft de reeks aan. In deze reeks, overlijdens Weerselo 1869-1882, bevinden zich 542 bestanden.
  • %24 is de URL encoding van het dollarteken. Dit zorgt voor problemen op de command line. Het resultaat is hetzelfde.
  • De -o parameter geeft aan hoe je het bestand wilt opslaan. '#1' is een wildcard om hier het nummer uit de reeks, die je in de URL hebt opgegeven, mee te vervangen.
  • Roep cURL vanuit een nieuwe directory aan. Anders krijg je duizenden bestanden in dezelfde directory, wat niet prettig werkt, en waardoor je het overzicht kwijtraakt.

Het resultaat is een serie bestanden met de namen wsl_o18691882_00001.jpg t/m wsl_o18691882_00542.jpg.

Zorg wel voor genoeg ruimte op de harde schijf, aangezien de afbeeldingen zelf ook groot zijn. Je kunt op deze manier vele GB's aan bestanden krijgen. Voor wat betreft "toestemming" van FamilySearch: er hebben zich ongetwijfeld mensen met kennis van zaken met deze website beziggehouden. Dat is ook wel nodig om terabytes aan data te publiceren op het internet! Aangezien zij zelf bekend maken hoe je achter de bestandsnaam kunnen komen, werken ze daar zelfs actief aan mee.

Een nadeel is wel dat soms de download om onverklaarbare redenen wordt afgebroken. Dan blijf je met halve bestanden zitten. Ik probeer een scriptje te maken om dit te detecteren (door een HTTP HEAD request te sturen, en de Content-Length header te vergelijken met de bestandsgrootte), en waarmee automatisch de rest wordt gedownload. Misschien kunnen incomplete downloads zelf met cURL worden herkend :) Zo goed ken ik het nog niet. (Ik probeerde of corrupte bestanden gemakkelijk met ImageMagick kunnen worden gedetecteerd, maar kon hier nog niet wijs uit worden.)

Frank

Frank Steggink

Ze leggen zelf uit hoe je met firebug een directe link naar een afbeelding kunt achterhalen. Andere browsers met een goede debugger zullen het ook wel kunnen. Voor mijn verhaal er omheen http://fam-pol.wikispaces.com/familysearch

Wie de link-truuk voor andere browsers wil uitleggen, kan dat aan mijn tips toevoegen. Aanmelden niet nodig maar beperk je a.j.b. tot de familysearch pagina's van deze wiki, anders ga ik weer aanmelden afdwingen.

Alles van een plaats downloaden lijkt me niet te doen. Tientallen bestanden per plaats met honderden afbeelding van een paar MB kost vele GBs. Maar de zwarte pagina's herkennen middels een script zou al een fantastiche hulp zijn bij het indexeren. Een goede gewoonte in dat soort download script is overigens een pauze van een paar seconden tussen ieder plaatje dat je ophaalt. Dat voorkomt overbelasting van de servers. Duurt even, maar als je de nummers van de zwarte pagina's hier publiceert, hoeven ze maar een keer te draaien en hebben we er allemaal wat aan.

Misschien is het een tip voor de makers van familysearch om de grootte van de afbeeldingen aan de xml files toe te voegen. Maar in hun forums zie ik door de bomen het bos niet zo: http://forums.familysearch.org/

Jo Pol

Jo,

De informatie in de XML bestanden bevat helaas geen informatie over de bestandsgrootte en de grootte (in pixels) van de afbeelding zelf.

Ook bevat een HTTP HEAD request niet de gewenste informatie. Deze zou normaalgesproken een Content-length header moeten bevatten, maar die is niet aanwezig. Een HEAD request zorgt ervoor dat alleen de HTTP headers worden teruggestuurd, maar niet het hele bestand. Daarmee wordt de server minder belast.

Met een HTTP GET request wordt het volledige bestand gedownload. De response hiervan bevat ook niet de Content-length header, maar wel een Stream-length header. Dit is geen standaard HTTP header. In dit opzicht is de HTTP implementatie brak te noemen, aangezien met een HEAD request geacht wordt dat exact dezelfde headers worden teruggegeven als met een GET request! V.w.b. het aanvullen van de incomplete bestanden zal ik dus wat anders moeten verzinnen.

cURL bevat trouwens geen optie om een pauze in te lassen tussen verschillende downloads. Wel is er een optie om de te gebruiken transfer rate in te perken (--limit-rate).

Frank

Frank Steggink

helaas, kaften vinden aan de hand van de grootte, te mooi om waar te zijn. Sommige kaften zijn gemarmerd en daarom voor een computer net zo groot als andere pagina's.

Jo Pol

Ik was zelf voornamelijk in de bestandsgrootte geïnteresseerd om afgebroken / corrupte afbeeldingen te vervangen door nieuwe. Niet zozeer om afwijkende afbeeldingen (niet alleen kaften, maar ook aanduidingen van de filmrol, e.d.) te vinden.

Frank Steggink

Voor wie geïnteresseerd is, mijn script werkt nu (geschreven in Python). De laatste 2 bytes van een geldig JPEG bestand moeten 0xFF, 0xD9 zijn. Door hierop te controleren, kon ik de incomplete bestanden weer downloaden. Er is wel een 1/65536 kans dat een corrupt bestand ook op deze bytes eindigt, maar dat neem ik maar voor lief :)

Frank

Frank Steggink

> omdat ik helaas heb gemerkt dat bronnen vaak weer gauw van internet verdwijnen

Omdat ze zelf aangeven hoe je de links van images kunt krijgen (en meer andere help paginas) gok ik dat die wel redelijk stabiel zijn, zeker de nummers binnen de links. De xml files bewaren brengt je dus al een heel eind als back-up voor noodgevallen.

De indexen die we hier zo druk verzamelen zouden we eventueel ook kunnen uitbreiden met de directe links, maar dat is misschien te ingewikkeld.

Jo Pol

Leuk om te zien dat meer mensen in dezelfde richting denken. ;)

Ik heb de headers nog niet bekeken, maar mijn browser weet bij het begin van de afbeelding wel het formaat in pixels. Zegt weinig over de grootte van het bestand, maar toch.

Ik zat eerst te denken aan een script dat de XMLs leest en alleen de links laat zien, dus de directe links naar de afbeeldingen. Dat zou voor veel mensen al een vooruitgang zijn. Voor mij al, want ik vind die flash-applicatie van ze niet handig en zeker niet mooi. Dan zou je met een download manager alle bestanden van een plaats kunnen downloaden (veel ruimte nodig, dat wel), maar dan instellen dat je max. 1 tegelijk wil downloaden, om serverload te beperken.

Maar ik denk ook aan een script dat van alle afbeeldingen een verkleining van zeg 300 pixels opslaat. Dan heb je in ieder geval afbeeldingen die groot genoeg zijn om snel te kunnen zien of het een boek-kaft is of een index of zo, en klein genoeg om lekker snel te kunnen bladeren. De images kunnen dan een link zijn naar de grote afbeelding natuurlijk. Maar dat zou het indexeren van alle bestanden wel heel snel kunnen maken.

Ik ben eerst nog even bezig met een scriptje dat de XMLs leest en weergeeft in een overzichtelijkere manier dan familysearch. (Ik wil de XML niet opslaan, de XML wordt dan live gelezen, dus als er iets wordt toegevoegd wordt dat automatisch meegenomen.) Daarna wil ik een test doen met een script dat mijn tweede idee uitvoert, kijken hoe snel het gaat (moet ook daar om serverload denken) en hoeveel ruimte het zou kosten. Beginnen met een heel kleine gemeente of zo... ;)

Andere ideeën?

Groeten,

Jerry

Jerry van Kooten

Ik ben geïnteresseerd in het script. Bestaat de mogelijkheid het ergens te downloaden?

Erik Schmidt - de Smidt

Het aantal op te slaan GB's is in mijn geval niet zo'n probleem en kan eventueel altijd opgelost worden door een goede resizer te gebruiken. Een goede en gratis resizer is FastStone Photo Resizer, je kunt hiermee niet alleen met behoud van kwaliteit grote aantallen afbeeldingen in 1 handeling verkleinen met een zelf aan te geven percentage maar je kunt dit programma ook gebruiken om - ook weer - in grote aantallen de afbeeldingen automatisch te hernummeren naar bijvoorbeeld een jaartal met als toevoeging een paginanummer telkens met een oplopend nummer, bijvoorbeeld beginnend met 1883_01 worden alle aangeboden afbeeldingen met 1 nummer verhoogd tot aan het einde van het aantal aangeboden afbeeldingen.

Dus bij 23 afbeeldingen krijg je dan 1883_01, 1883_02, 1883_03.... t/m 1883_23.

 

Hierbij de link om FastStone te downloaden http://www.faststone.org/FSResizerDetail.htm

 

 

M.vr.gr.

 

Leo Terlouw

 

Leo Terlouw

Ik wacht ook met spanning op het thumnail script. Qua interface vind ik het zoomgebeuren van familysearch wel mooi. Maar daarboven had ik liever broodkruimels in de vorm van comboboxen* daaronder een scrollende regel met thumbnails. Een schets:

eu/nl [v] gelderland [v] elburg [v] geboortes [v] 1867 [v]

[<] [#] [#] [#] [#] [#] [#] [#] [#] [#] [#] [#] [#] [#] [#] [#] [#] [#] [>]

Zou in een web-pagina met javascript moeten kunnen. Of met xslt's en veel (kleine) frames. Het zou mooi zijn als het indexeerwerk van hier ook verwerkt zou kunnen worden.

*combobox: een veld wat je kunt open klappen om te bladeren, maar waarin je ook kunt typen om sneller bij je keuze te komen.

Jo Pol

Op zoek naar thumbnails ben ik eens gaan rommelen met de directe links en vond dit:

https://das.familysearch.org/das/rest.v2.nodeLocator.streamName.html

kennelijk zijn er alternatieven voor de $dist staart uit de directe links, maar ik kan niet vinden welke. Misschien weten andere specialisten er wel raad mee.

Jo Pol


Ik heb een scriptje gemaakt dat de XMLs van FamilySearch leest en na kiezen van de provincie, plaats en bron je de lijst geeft van alle afbeeldingen:

http://familie.jvkooten.info/fs/

Alle URLs van afbeeldingen openen in een nieuw venster. Je kunt deze lijst dus gebruiken om alle afbeeldingen van een bron te downloaden.

Volgende plan is om de URLs van de afbeeldingen in een database te zetten (ook op mijn website, dus als het klaar is door iedereen te raadplegen). Daar kan ik dan natuurlijk extra gegevens bij zetten, zoals de paginanummers die in dit subforum zijn genoemd. En dan is het simpel om de mogelijkheid te bieden om bezoekers omschrijvingen bij afbeeldingen te laten toevoegen...

Ik heb ook een resize-script gemaakt waarmee ik ook thumbnails in de database kan zetten. Ik wil daar alleen een scriptje omheen bouwen zodat ik niet in 1 x alle afbeeldingen hoef te lezen en thumbnails van te maken, maar dat ik dat per bron doe, en dan nog steeds een klein aantal afbeeldingen tegelijk. Ook mogelijk: het script gaat thumbnails zodra een bezoeker de bron opent.

Ik ga eerst een kijken naar de mogelijkheden van die $dist die Jo noemt - klinkt interesant!

Jerry

Jerry van Kooten




Plaats een reactie

Om reacties (en nieuwe onderwerpen) te plaatsen op het Stamboom Forum dient u eerst in te loggen! Nog geen lid? Registratie is gratis en snel!