View Single Post
Sitat av Anonym bruker Vis innlegg
Kan du få denne til å fungere med aviser også? Eksempel: https://www.nb.no/items/6ad2a29de1ae...852ef00b99b146

Om det er noen som vet/ gjetter hvordan begrensede bøker og aviser fungerer? Hvordan begrenser de?
1. Tror du bøkene ligger på internett, eller kun lokalt på bibliotekene?
2. Har de en iprange kun åpen for bibliotene?
3. Er de krypterte?
4. Ligger de egentlig helt åpne på internettet, men under et annet subdomene eller noe?

Hadde vært fristende å dratt til et slikt bibliotek å sjekke hva URL-en egentlig er der.
Vis hele sitatet...
Oppdatert scriptet for aviser også.
En kjører det likt som ved bøker, men slenger på en ekstra --avis
Fremgangsmetoden for ID er lik som for bøker, men på avis er den noe lengre, for eksempelet ditt er ID som må brukes alt etter digiavis_, dermed arbeiderbladetoslo_null_null_19621224_77_299_1
Vær også oppmerksom på at det bruker noe lengre tid på å kjøre, da sidene er satt sammen av flere bilder. Denne består av 54 bilder per side (ved level/maxLevel 5/5).

Sitat av snippsat Vis innlegg
Lanjelin viss du vil ha en Python 3.6 version i Repo ditt.
Skrevet rask om med hjelp av noen verktøy,også litt nærmere PEP-8 .
Jeg trenges ikke og nevnes viss du bruker koden i Repo.
SPOILER ALERT! Vis spoiler

Kode

# nbno_3.py
# A rewrite to Python 3.6 of @Lanjelin nbno.py
# It works just the same:
# python nbno_3.py --id 2007091701011
import io
import urllib.request
import urllib.error
import urllib.parse
import os
import argparse
from PIL import Image

class theURL():
    def __init__(self, bokID):
        self.bokID = str(bokID)
        self.side = '0001'
        self.level = 5
        self.maxLevel = 5
        self.col = 0
        self.maxcol = 0
        self.row = 0
        self.maxrow = 0
        self.resX = '9999'
        self.resY = '9999'
        self.tileWidth = '1024'
        self.tileHeight = '1024'
        self.URL = ''

    def setLevel(self, level):
        self.level = int(level)

    def setMaxLevel(self, maxLevel):
        self.maxLevel = int(maxLevel)

    def updateURL(self):
        self.URL = 'http://www.nb.no/services/image/resolver?url_ver=geneza&urn=URN:NBN:no-nb_digibok_' +\
            str(self.bokID) + '_' + self.side +\
            '&maxLevel=' + str(self.maxLevel) + '&level=' + str(self.level) +\
            '&col=' + str(self.col) + '&row=' + str(self.row) +\
            '&resX=' + str(self.resX) + '&resY=' + str(self.resY) +\
            '&tileWidth=' + str(self.tileWidth) + \
            '&tileHeight=' + str(self.tileWidth)

    def newURL(self, side, col, row):
        self.side = str(side)
        self.col = int(col)
        self.row = int(row)
        self.updateURL()
        return self.URL

    def updateMaxColRow(self, side):
        c, r = 0, 0
        while True:
            xUrl = self.newURL(side, c, '0')
            try:
                req = urllib.request.Request(
                    xUrl, headers={'User-Agent': 'Mozilla/5.0'})
                response = urllib.request.urlopen(req)
            except urllib.error.HTTPError as e:
                c -= 1
                break
            else:
                c += 1
        while True:
            xUrl = self.newURL(side, '0', r)
            try:
                req = urllib.request.Request(
                    xUrl, headers={'User-Agent': 'Mozilla/5.0'})
                response = urllib.request.urlopen(req)
            except urllib.error.HTTPError as e:
                r -= 1
                break
            else:
                r += 1
        self.maxcol = int(c)
        self.maxrow = int(r)
        return str(c) + str(r)

def downloadPage(pageNum, bok):
    imageParts = []
    maxWidth, maxHeight = 0, 0
    r = 0
    while (r <= bok.maxrow):
        c = 0
        while (c <= bok.maxcol):
            url = bok.newURL(pageNum, c, r)
            try:
                req = urllib.request.Request(
                    url, headers={'User-Agent': 'Mozilla/5.0'})
                response = urllib.request.urlopen(req).read()
            except urllib.error.HTTPError as e:
                # print e
                error = e  # spiser bare denne da første ugyldige side spytter ut feilmeldinger før stopp
            else:
                img = Image.open(io.BytesIO(response))
                imageParts.append(img)
                if (r == 0):
                    maxWidth += img.size[0]
                if (c == 0):
                    maxHeight += img.size[1]
            c += 1
        r += 1
    if (len(imageParts) == 0):
        print('Ferdig med å laste ned alle sider.')
        exit()
    else:
        sinWidth, sinHeight = imageParts[0].size
        newImg = Image.new('RGB', (maxWidth, maxHeight))
        r = 0
        partCount = 0
        while (r <= bok.maxrow):
            c = 0
            while (c <= bok.maxcol):
                newImg.paste(imageParts[partCount],
                             ((c * sinWidth), (r * sinHeight)))
                partCount += 1
                c += 1
            r += 1
        newImg.save(folder + str(pageNum) + '.jpg')
        print('Lagret side ' + pageNum + '.jpg')
        # print 'MaxWidth: '+str(maxWidth)+' MaxHeight: '+str(maxHeight)
        # print 'SingleWidth: '+str(sinWidth)+' SingleHeight: '+str(sinHeight)
        # print 'Antall bilder per side: '+str(len(imageParts))

parser = argparse.ArgumentParser()
optional = parser._action_groups.pop()
required = parser.add_argument_group('required arguments')
required.add_argument('--id', metavar='<bokID>',help='IDen på boken som skal lastes ned', default=False)
optional.add_argument('--start', metavar='<int>', help='Sidetall å starte på', default=False)
optional.add_argument('--stop', metavar='<int>', help='Sidetall å stoppe på', default=False)
optional.add_argument('--level', metavar='<int>', help='Sett Level', default=False)
optional.add_argument('--maxlevel', metavar='<int>', help='Sett MaxLevel', default=False)
parser._action_groups.append(optional)
args = parser.parse_args()

if args.id:
    x = theURL(str(args.id))
    print('Laster ned bok med ID: ' + str(args.id))
    folder = '.' + os.path.sep + str(x.bokID) + os.path.sep
    try:
        os.stat(folder)
    except:
        os.mkdir(folder)
    if args.level:
        x.setLevel(int(args.level))
    if args.maxlevel:
        x.setMaxLevel(int(args.maxlevel))
    x.updateMaxColRow('C1')
    downloadPage('C1', x)
    x.updateMaxColRow('C2')
    downloadPage('C2', x)
    x.updateMaxColRow('C3')
    downloadPage('C3', x)
    x.updateMaxColRow('0001')
    if args.start:
        pageCounter = int(args.start)
    else:
        pageCounter = 1
    if args.stop:
        stopPage = int(args.stop)
    else:
        stopPage = 9999
    while True:
        downloadPage(str(pageCounter).rjust(4, '0'), x)
        if (pageCounter == stopPage):
            print('Ferdig med å laste ned alle sider.')
            exit()
        pageCounter += 1
else:
    parser.print_help()
    exit()
Vis hele sitatet...
Hepp, kult, takker!
Har ikke beveget meg så mye over på python 3.6, og har ikke satt opp maskinen for det heller.
Om jeg får kjørt begge parallellt/problemfritt på Mac'en, er det mulig jeg legger det til!
Kodingen min består vel i utgangspunktet av 50% bruk av google, om jeg må legge til litt til for å holde vedlike en 3.6 versjon, bør gå greit.
Sist endret av Lanjelin; 22. april 2018 kl. 19:40.