Orcasa-Platform / orcasa-review4c

https://orcasa-review4c.vercel.app/
MIT License
0 stars 0 forks source link

Question sur un endpoint #111

Open EmilieVrot opened 1 week ago

EmilieVrot commented 1 week ago

Bonjour François,

Une autre plateforme européenne en cours de développement (Soilwise) est intéressée pour moissonner Impact4Soil.

Ils ont fait des tests et ils ont trouvé ce endpoint:

harvest publications

if 'document' in harvesttypes: url="https://www.impact4soil.com/scientific-evidence/publicationstojson"

add source if it does not exist

hasSource(label,url,'',label)

count=10
page=1
max=50
print('Impact4Soil Publications')
while count > 0 and (page*20 < max):
    headers = {'Accept': 'application/json', "User-Agent": "Soilwise Harvest v0.1"}
    proceed = True
    records = []
    try:
        resp = requests.get(f"{url}?page={page}",headers=headers)
        records = resp.json()
    except requests.exceptions.RequestException as e:  # This is the correct syntax
        proceed = False
        print(f'Error fetching {url}?page={page}, {e}')

    if proceed : 
        cnt = 1
        count=len(records)
        for r in records: 
            print(f"{(page-1)*20+cnt}. {r.get('url',r.get('id'))}")
            cnt=cnt+1
            id = r.get('url',r.get('id'))

            hashcode = hashlib.md5(str(r).encode("utf-8")).hexdigest() # get unique hash for html 
            insertRecord(   identifier=stripdoi(id),
                            uri=r.get('url'),
                            identifiertype=tp(id),
                            title=r.get('title',''),
                            resulttype='JSON',
                            resultobject=str(r),
                            hashcode=hashcode,
                            source=label,
                            itemtype='document') # insert into db
    page = page+1

harvest datasets

if 'dataset' in harvesttypes: url = "https://www.impact4soil.com/datasets-api/datasets" # ?size=5&page=10

add source if it does not exist

hasSource(label,url,'',label)
count=10
page=1
size=50
max=50
print('Impact4Soil Datasets')

while count > 0 and (page-1*size < max):
    headers = {'Accept': 'application/json', "User-Agent": "Soilwise Harvest v0.1"}
    proceed = True
    records = []
    try:
        resp = requests.get(f"{url}?page={page}&size={size}",headers=headers)
        records = resp.json().get('data')
        max = resp.json().get('meta',{}).get("total_records",max)
    except requests.exceptions.RequestException as e:  # This is the correct syntax
        proceed = False
        print(f'Error fetching {url}?page={page}, {e}')
    if proceed: 
        cnt = 1

        count=len(records)
        for r in records: 
            print(f"{(page-1)*size+cnt}. {r.get('url',r.get('id'))}")
            cnt=cnt+1
            hashcode = hashlib.md5(str(r).encode("utf-8")).hexdigest() # get unique hash for html 
            id = r.get('url',r.get('id'))
            insertRecord(   identifier=stripdoi(id),
                            uri=r.get('url'),
                            identifiertype=tp(id),
                            title=r.get('title',''),
                            resulttype='JSON',
                            resultobject=str(r),
                            hashcode=hashcode,
                            source=label,
                            itemtype='dataset') # insert into db
    page = page+1

Est-ce qu'ils peuvent se baser dessus? Les chiffres qui en ressortent ne sont pas ceux qu'on a sur la plateforme:

image

Merci à toi

khameos commented 1 week ago

Bonjour Emilie,

oui cela doit être possible de passer par cette fonction.

Elle renvoie à chaque fois 20 publications:

https://www.impact4soil.com/scientific-evidence/publicationstojson?page=1 => les 20 1ers

https://www.impact4soil.com/scientific-evidence/publicationstojson?page=669 => les derniers

On a +13000 docs.

Après je ne sais pas où est le bug de leur côté ; sans doute un champ obligatoire chez eux qui est NULL chez nous @+