Esempi di utilizzo dei dati tramite Python

Per dettagli sulle API di CKAN si faccia riferimento alla relativa documentazione

Le API REST di CKAN rispondono ad interrogazioni HTTP sulla porta 80.

Per avere informazioni sui macrogruppi descrittivi le chiamate si costruiscono usando il suffisso "/api/3/action/"

le query possono essere :

1. group_list
2. package_list
3. tag_list

La query 1. restituisce la lista dei gruppi, eventuali altri parametri possono essere passati

La query 2. restituisce la lista dei dataset, in precedenti versioni di CKAN questi erano chiamati 'packages' e tracce di questa nomenclatura sono rimaste, eventuali altri parametri possono essere passati

La query 3. restituisce la lista complessiva dei tag che descrivono i vari dataset, tramite il singolo tag e' possibile effettuare ricerche sui singoli datasei. Eventuali altri parametri possono essere passati.

Nota bene:

I risultati presenti in questa pagina sono frutto di un'attivita' dimostrativa quindi sono da considerare solo come un aiuto per lo studio delle interfacce.

Esempio 1

come ottenere i valori di group_list, package_list, tag_list

Per far funzionare l'esempio occorre installare il modulo requests

( Per l'installazione eventualmente fare pip install requests )

In [1]:
# inizializzazione comune
import requests
import pprint

url_base = "http://data.tdm-project.it/api/3/action/"
In [2]:
# esempio di ricezione informazioni
items_to_query = ["group_list", "package_list", "tag_list"]

for item in items_to_query:
    r = requests.get(url_base+item)
    print("*"*40)
    print("Query: {}".format(item))
    print("*"*40)
    pprint.pprint(r.json())
    print()
****************************************
Query: group_list
****************************************
{'help': 'http://data.tdm-project.it/api/3/action/help_show?name=group_list',
 'result': ['energia', 'meteo'],
 'success': True}

****************************************
Query: package_list
****************************************
{'help': 'http://data.tdm-project.it/api/3/action/help_show?name=package_list',
 'result': ['devicestatus', 'energymonitor', 'weatherobserved'],
 'success': True}

****************************************
Query: tag_list
****************************************
{'help': 'http://data.tdm-project.it/api/3/action/help_show?name=tag_list',
 'result': [],
 'success': True}

Esempio 2

La fase di inizializzazione e' comune all'esempio 1

Partendo dal nome di un gruppo ottenuto dall'esempio precedente si richiede quali datasets coinvolga.

Per avere la lista dei datasets occorre impostare a True il parametro include_datasets e tramite il parametro id quale gruppo ispezionare.

In questo caso l'endpoint da usare e' group_show.

Per ulteriori dettagli documentazione

In [3]:
# qui si deve usare include_datasets
parameters = {'id': 'meteo','include_datasets': True}
url_base='http://data.tdm-project.it/api/3/action/'
r = requests.get(url_base+'group_show', params=parameters)
pprint.pprint(r.json())
{'help': 'http://data.tdm-project.it/api/3/action/help_show?name=group_show',
 'result': {'approval_status': 'approved',
            'created': '2018-05-30T14:30:20.833716',
            'description': '',
            'display_name': 'meteo',
            'extras': [],
            'groups': [],
            'id': '47965822-5ec6-4117-8fc4-77b3433e9742',
            'image_display_url': '',
            'image_url': '',
            'is_organization': False,
            'name': 'meteo',
            'num_followers': 0,
            'package_count': 6,
            'packages': [{'author': None,
                          'author_email': None,
                          'creator_user_id': '844db47c-c165-4301-88af-f1150a6cb4d4',
                          'extras': [],
                          'id': '96417821-2660-4447-906a-a46325638b00',
                          'isopen': False,
                          'license_id': None,
                          'license_title': None,
                          'maintainer': None,
                          'maintainer_email': None,
                          'metadata_created': '2018-11-23T17:42:56.862329',
                          'metadata_modified': '2018-11-23T17:42:57.230405',
                          'name': 'radar_netcdf_2018-10-11',
                          'notes': None,
                          'num_resources': 2,
                          'num_tags': 2,
                          'organization': {'approval_status': 'approved',
                                           'created': '2018-05-25T16:13:58.956150',
                                           'description': 'Dataset '
                                                          'relativi al '
                                                          'progetto TDM.',
                                           'id': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                                           'image_url': '2018-07-12-085811.277378tdm-logo.png',
                                           'is_organization': True,
                                           'name': 'tdm',
                                           'revision_id': 'a84e31f9-1220-4650-a9af-f7e7f3a323cd',
                                           'state': 'active',
                                           'title': 'TDM',
                                           'type': 'organization'},
                          'owner_org': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                          'private': False,
                          'relationships_as_object': [],
                          'relationships_as_subject': [],
                          'revision_id': '8816c844-53e7-4bbe-9a36-a54e9188ea52',
                          'state': 'active',
                          'title': 'Rainfall event 2018-10-11',
                          'type': 'dataset',
                          'url': None,
                          'version': None},
                         {'author': None,
                          'author_email': None,
                          'creator_user_id': '844db47c-c165-4301-88af-f1150a6cb4d4',
                          'extras': [],
                          'id': '64b5cb13-015d-41ed-a1f2-a597d24fb727',
                          'isopen': False,
                          'license_id': None,
                          'license_title': None,
                          'maintainer': None,
                          'maintainer_email': None,
                          'metadata_created': '2018-11-23T17:39:59.552843',
                          'metadata_modified': '2018-11-23T17:40:00.031977',
                          'name': 'radar_netcdf_2018-08-16',
                          'notes': None,
                          'num_resources': 2,
                          'num_tags': 2,
                          'organization': {'approval_status': 'approved',
                                           'created': '2018-05-25T16:13:58.956150',
                                           'description': 'Dataset '
                                                          'relativi al '
                                                          'progetto TDM.',
                                           'id': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                                           'image_url': '2018-07-12-085811.277378tdm-logo.png',
                                           'is_organization': True,
                                           'name': 'tdm',
                                           'revision_id': 'a84e31f9-1220-4650-a9af-f7e7f3a323cd',
                                           'state': 'active',
                                           'title': 'TDM',
                                           'type': 'organization'},
                          'owner_org': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                          'private': False,
                          'relationships_as_object': [],
                          'relationships_as_subject': [],
                          'revision_id': '62219db2-d726-4e77-821f-0f233748c44c',
                          'state': 'active',
                          'title': 'Rainfall event 2018-08-16',
                          'type': 'dataset',
                          'url': None,
                          'version': None},
                         {'author': None,
                          'author_email': None,
                          'creator_user_id': '844db47c-c165-4301-88af-f1150a6cb4d4',
                          'extras': [],
                          'id': '56ed4362-f047-4bcb-a6c6-8ee9460667ed',
                          'isopen': False,
                          'license_id': None,
                          'license_title': None,
                          'maintainer': None,
                          'maintainer_email': None,
                          'metadata_created': '2018-11-20T16:32:57.304838',
                          'metadata_modified': '2018-11-20T16:32:57.785813',
                          'name': 'radar_netcdf_2018_08_16',
                          'notes': None,
                          'num_resources': 1,
                          'num_tags': 2,
                          'organization': {'approval_status': 'approved',
                                           'created': '2018-05-25T16:13:58.956150',
                                           'description': 'Dataset '
                                                          'relativi al '
                                                          'progetto TDM.',
                                           'id': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                                           'image_url': '2018-07-12-085811.277378tdm-logo.png',
                                           'is_organization': True,
                                           'name': 'tdm',
                                           'revision_id': 'a84e31f9-1220-4650-a9af-f7e7f3a323cd',
                                           'state': 'active',
                                           'title': 'TDM',
                                           'type': 'organization'},
                          'owner_org': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                          'private': False,
                          'relationships_as_object': [],
                          'relationships_as_subject': [],
                          'revision_id': 'fea0c3c9-1a60-4ad4-9326-a3d98f4559f4',
                          'state': 'active',
                          'title': 'Evento meteo 16/08/2018',
                          'type': 'dataset',
                          'url': None,
                          'version': None},
                         {'author': '',
                          'author_email': '',
                          'creator_user_id': '844db47c-c165-4301-88af-f1150a6cb4d4',
                          'extras': [],
                          'id': '607fc51f-f7f6-449a-8a10-a73514d7b7d4',
                          'isopen': True,
                          'license_id': 'cc-by',
                          'license_title': 'Creative Commons Attribution',
                          'license_url': 'http://www.opendefinition.org/licenses/cc-by',
                          'maintainer': '',
                          'maintainer_email': '',
                          'metadata_created': '2018-06-25T16:30:01.001949',
                          'metadata_modified': '2018-11-13T00:00:59.096759',
                          'name': 'weatherobserved',
                          'notes': 'Dati di tipo meteo/ambientale '
                                   'raccolti dagli Edge Device TDM '
                                   'distribuiti sulla Città Metropolitana '
                                   'di Cagliari.',
                          'num_resources': 53,
                          'num_tags': 6,
                          'organization': {'approval_status': 'approved',
                                           'created': '2018-05-25T16:13:58.956150',
                                           'description': 'Dataset '
                                                          'relativi al '
                                                          'progetto TDM.',
                                           'id': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                                           'image_url': '2018-07-12-085811.277378tdm-logo.png',
                                           'is_organization': True,
                                           'name': 'tdm',
                                           'revision_id': 'a84e31f9-1220-4650-a9af-f7e7f3a323cd',
                                           'state': 'active',
                                           'title': 'TDM',
                                           'type': 'organization'},
                          'owner_org': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                          'private': False,
                          'relationships_as_object': [],
                          'relationships_as_subject': [],
                          'revision_id': '08f72bfe-803b-4df3-9a28-80076098546e',
                          'state': 'active',
                          'title': 'WeatherObserved',
                          'type': 'dataset',
                          'url': '',
                          'version': ''},
                         {'author': '',
                          'author_email': '',
                          'creator_user_id': '844db47c-c165-4301-88af-f1150a6cb4d4',
                          'id': 'b5ad2241-9a12-4f4a-8035-4e2c945fbb8d',
                          'isopen': True,
                          'license_id': 'cc-by',
                          'license_title': 'Creative Commons Attribution',
                          'license_url': 'http://www.opendefinition.org/licenses/cc-by',
                          'maintainer': '',
                          'maintainer_email': '',
                          'metadata_created': '2018-06-01T13:06:20.513705',
                          'metadata_modified': '2018-06-13T11:54:27.997647',
                          'name': 'sim-meteo-latest',
                          'notes': '',
                          'num_resources': 138,
                          'num_tags': 3,
                          'organization': {'approval_status': 'approved',
                                           'created': '2018-05-25T16:13:58.956150',
                                           'description': '',
                                           'id': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                                           'image_url': '',
                                           'is_organization': True,
                                           'name': 'tdm',
                                           'revision_id': 'ee35173e-f230-4902-a99e-7e694e8b3202',
                                           'state': 'active',
                                           'title': 'TDM',
                                           'type': 'organization'},
                          'owner_org': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                          'private': False,
                          'relationships_as_object': [],
                          'relationships_as_subject': [],
                          'revision_id': '35326881-1f28-48ac-aef7-444bcfbffd58',
                          'state': 'active',
                          'title': 'sim-meteo-latest',
                          'type': 'dataset',
                          'url': '',
                          'version': ''},
                         {'author': '',
                          'author_email': '',
                          'creator_user_id': '44f157e0-ad1e-4b96-b28c-f50b21d6e02c',
                          'extras': [],
                          'id': '1c7ab540-e080-4957-b3f0-e550c4c3508a',
                          'isopen': True,
                          'license_id': 'cc-by',
                          'license_title': 'Creative Commons Attribution',
                          'license_url': 'http://www.opendefinition.org/licenses/cc-by',
                          'maintainer': '',
                          'maintainer_email': '',
                          'metadata_created': '2018-06-07T15:39:05.104659',
                          'metadata_modified': '2018-06-12T15:46:33.598162',
                          'name': 'radar_meteo_unica',
                          'notes': '',
                          'num_resources': 48,
                          'num_tags': 3,
                          'organization': {'approval_status': 'approved',
                                           'created': '2018-05-25T16:13:58.956150',
                                           'description': 'Dataset '
                                                          'relativi al '
                                                          'progetto TDM.',
                                           'id': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                                           'image_url': '2018-07-12-085811.277378tdm-logo.png',
                                           'is_organization': True,
                                           'name': 'tdm',
                                           'revision_id': 'a84e31f9-1220-4650-a9af-f7e7f3a323cd',
                                           'state': 'active',
                                           'title': 'TDM',
                                           'type': 'organization'},
                          'owner_org': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                          'private': False,
                          'relationships_as_object': [],
                          'relationships_as_subject': [],
                          'revision_id': 'cd826984-4c7e-494b-adbc-b8e0582ecce6',
                          'state': 'active',
                          'title': 'radar-meteo-unica',
                          'type': 'dataset',
                          'url': '',
                          'version': ''}],
            'revision_id': '4bd11508-f755-4930-9c46-8b64ef2b5661',
            'state': 'active',
            'tags': [],
            'title': 'meteo',
            'type': 'group',
            'users': [{'about': None,
                       'activity_streams_email_notifications': False,
                       'capacity': 'admin',
                       'created': '2018-05-25T16:13:14.988377',
                       'display_name': 'admin',
                       'email_hash': 'edf7d8ada56dde083ff3d04d6b1e3861',
                       'fullname': None,
                       'id': '844db47c-c165-4301-88af-f1150a6cb4d4',
                       'name': 'admin',
                       'number_created_packages': 9,
                       'number_of_edits': 2161,
                       'state': 'active',
                       'sysadmin': True},
                      {'about': None,
                       'activity_streams_email_notifications': False,
                       'capacity': 'admin',
                       'created': '2018-06-04T15:46:18.241672',
                       'display_name': 'XXXXXX XXXXXX',
                       'email_hash': '18a74de6ad4a096522b9ed3728bb7859',
                       'fullname': 'XXXXXX XXXXXX',
                       'id': '8e1d71f9-f9d5-427b-b34c-76603f46d1a8',
                       'name': 'fXXXXXX',
                       'number_created_packages': 0,
                       'number_of_edits': 2,
                       'state': 'active',
                       'sysadmin': False},
                      {'about': None,
                       'activity_streams_email_notifications': False,
                       'capacity': 'admin',
                       'created': '2018-05-25T16:16:22.425894',
                       'display_name': 'XXXXXX XXXXXX',
                       'email_hash': '0a42bb8cbaee0333bb99f1ff76cb94e0',
                       'fullname': 'XXXXXX XXXXXX',
                       'id': '44f157e0-ad1e-4b96-b28c-f50b21d6e02c',
                       'name': 'mXXXXXX',
                       'number_created_packages': 1,
                       'number_of_edits': 1070,
                       'state': 'active',
                       'sysadmin': True}]},
 'success': True}

Esempio 3

La fase di inizializzazione e' comune all'esempio 1

Partendo dal nome di un dataset ottenuto dall'esempio precedente si richiede quali risorse esso coinvolga.

Per avere la lista dei delle risorse occorre indicare tramite il parametro id quale dataset si intenda usare .

In questo caso l'endpoint da usare e' package_show.

Il campo utile e' la lista resources, ogni item ha un url che da la possibilita' di scaricare direttamente il pacchetto con le informazioni richieste.

Per ulteriori dettagli documentazione

In [4]:
parameters = {'id': 'energymonitor'}
url_base='http://data.tdm-project.it/api/3/action/'
r = requests.get(url_base+'package_show', params=parameters)
pprint.pprint(r.json())
{'help': 'http://data.tdm-project.it/api/3/action/help_show?name=package_show',
 'result': {'author': '',
            'author_email': '',
            'creator_user_id': '844db47c-c165-4301-88af-f1150a6cb4d4',
            'extras': [],
            'groups': [{'description': '',
                        'display_name': 'energia',
                        'id': '5034199c-5893-4735-83d8-343721382872',
                        'image_display_url': '',
                        'name': 'energia',
                        'title': 'energia'}],
            'id': 'a26250db-e776-42bf-a51e-43867a0191ba',
            'isopen': True,
            'license_id': 'cc-by',
            'license_title': 'Creative Commons Attribution',
            'license_url': 'http://www.opendefinition.org/licenses/cc-by',
            'maintainer': '',
            'maintainer_email': '',
            'metadata_created': '2018-06-25T16:30:22.892199',
            'metadata_modified': '2018-11-13T00:00:59.092990',
            'name': 'energymonitor',
            'notes': 'Dati di consumo elettrico raccolti dagli Edge Device '
                     'TDM distribuiti sulla Città Metropolitana di Cagliari.',
            'num_resources': 50,
            'num_tags': 4,
            'organization': {'approval_status': 'approved',
                             'created': '2018-05-25T16:13:58.956150',
                             'description': 'Dataset relativi al progetto '
                                            'TDM.',
                             'id': 'bd43bfd4-1171-4612-8cee-65dd01503848',
                             'image_url': '2018-07-12-085811.277378tdm-logo.png',
                             'is_organization': True,
                             'name': 'tdm',
                             'revision_id': 'a84e31f9-1220-4650-a9af-f7e7f3a323cd',
                             'state': 'active',
                             'title': 'TDM',
                             'type': 'organization'},
            'owner_org': 'bd43bfd4-1171-4612-8cee-65dd01503848',
            'private': False,
            'relationships_as_object': [],
            'relationships_as_subject': [],
            'resources': [{'cache_last_updated': None,
                           'cache_url': None,
                           'created': '2018-07-13T00:00:15.208917',
                           'datastore_active': True,
                           'description': '',
                           'format': '',
                           'hash': '',
                           'id': '46cfab56-c0f1-4164-a665-e67cc6cb8232',
                           'last_modified': None,
                           'mimetype': None,
                           'mimetype_inner': None,
                           'name': 'energymonitor_2018-07-12:00:00.csv',
                           'package_id': 'a26250db-e776-42bf-a51e-43867a0191ba',
                           'position': 0,
                           'resource_type': None,
                           'revision_id': '8d798849-91c0-46cc-aafa-b80d9d653633',
                           'size': None,
                           'state': 'active',
                           'url': 'http://data.tdm-project.it/datastore/dump/46cfab56-c0f1-4164-a665-e67cc6cb8232',
                           'url_type': 'datastore'},
                          {'cache_last_updated': None,
                           'cache_url': None,
                           'created': '2018-07-14T00:00:15.396959',
                           'datastore_active': True,
                           'description': '',
                           'format': '',
                           'hash': '',
                           'id': '3b9d9647-7c65-4d93-8042-34aeaf0881a6',
                           'last_modified': None,
                           'mimetype': None,
                           'mimetype_inner': None,
                           'name': 'energymonitor_2018-07-13:00:00.csv',
                           'package_id': 'a26250db-e776-42bf-a51e-43867a0191ba',
                           'position': 1,
                           'resource_type': None,
                           'revision_id': '8d798849-91c0-46cc-aafa-b80d9d653633',
                           'size': None,
                           'state': 'active',
                           'url': 'http://data.tdm-project.it/datastore/dump/3b9d9647-7c65-4d93-8042-34aeaf0881a6',
                           'url_type': 'datastore'}
                          ],
            'revision_id': '80ce13ad-a27b-422b-8883-48c90b75f68e',
            'state': 'active',
            'tags': [{'display_name': 'Edge',
                      'id': 'db899d5c-3012-42b7-b1a7-c51213e976bc',
                      'name': 'Edge',
                      'state': 'active',
                      'vocabulary_id': None},
                     {'display_name': 'EnergyMonitor',
                      'id': 'bf10700c-a1b0-424c-b21a-bea5ca9f533a',
                      'name': 'EnergyMonitor',
                      'state': 'active',
                      'vocabulary_id': None},
                     {'display_name': 'Gateway',
                      'id': '38ad15b7-72f4-4f80-a8a6-01901f06c9b7',
                      'name': 'Gateway',
                      'state': 'active',
                      'vocabulary_id': None},
                     {'display_name': 'energy',
                      'id': 'a5fc8fec-833f-435e-a642-e5f52dde26cd',
                      'name': 'energy',
                      'state': 'active',
                      'vocabulary_id': None}],
            'title': 'EnergyMonitor',
            'type': 'dataset',
            'url': '',
            'version': ''},
 'success': True}
In [ ]: