* Mobilizon importer File and rss importer into mobilizon graphql api. ** Installation and usage #+BEGIN_EXAMPLE sh git clone https://git.kompot.si/lio/mobili_cli cd mobili_cli pip3 install -e . export PATH=~/.local/bin/:$PATH mobili_cli cli --help #+END_EXAMPLE ** Functionality *** Login *** Get events *** Create event - options: - update existing - skip existing **** From file **** User input **** Rss feed **** Verificiraj ali dogodek ze obstaja - za rss feed lahko uporabimo link ** Structure - python Click library for cli - json - graphql-core https://github.com/graphql-python/graphql-core - https://graphql-core-3.readthedocs.io/en/latest/usage/queries.html *** developing in guix ** Python requests #+BEGIN_EXAMPLE python import requests import json endpoint='https://dogodki.kompot.si/api' body=''' query { events { elements { id, url, title, description, beginsOn, endsOn, status, picture { url }, physicalAddress { id, description, locality } } total } } ''' r = requests.post(endpoint, json={'query':body}, '') r = requests.post(endpoint, json={"query":body}, headers='') r.status_code print(json.dumps(r.json(), indent=2)) body body2=''' query { events { elements { id, url, title, description, beginsOn, endsOn, status, picture { url }, physicalAddress { id, description, locality } } } } ''' body2=''' query { groups { elements { id, name, domain, page } } } ''' r2 = requests.post(endpoint, json={"query":body2}, headers='') print(json.dumps(r2.json(), indent=2)) body2="query{grups{elements{id,name}}}" r2 = requests.post(endpoint, json={"query":body2}, headers='') r2.status_code print(json.dumps(r2.json(), indent=2)) b2 body2 body2="query{\ngrups{\nelements{\nid,\nname\n}\n}\n}" r2 = requests.post(endpoint, json={"query":body2}, headers='') r2.status_code r2 = requests.post(endpoint, json={"query":body2}, headers='') print(json.dumps(r2.json(), indent=2)) bl=''' mutation Login($email: String!, $password: String!) { login(email: $email, password: $password) { accessToken refreshToken user { id email role } } } ''' varsl= {'email': 'lio@kompot.si', 'password': ''} r3=requests.post(endpoint, json={"query": bl, 'variables': varsl}, headers='') r3.status_code print(json.dumps(r3json(), indent=2)) print(json.dumps(r3.json(), indent=2)) r3.json() r3.json().data r3.json().get('data') r3.json().get('data').get.('login') r3.json().get('data').get('login') r3.json().get('data').get('login').get('login') r3.json().get('data').get('login').get('accessToken') r3.json().get('data.login') j=r3.json() data=json.loads(j) j data=json.loads(j) print j['data']['login']['accessToken'] j j['data'] j['data']['login'] j['data']['login']['accessToken'] at=j['data']['login']['accessToken'] head={"Authorization": f"Bearer {at}"} r2 = requests.post(endpoint, json={"query":body2}, headers='') print(json.dumps(r2.json(), indent=2)) bg="query{groups{elements{id,name}\ntotal}}" r2 = requests.post(endpoint, json={"query":body2}, headers='') print(json.dumps(r2.json(), indent=2)) bg="query {\ngroups {\nelements {\nid,\nname}\ntotal\n}\n}" bg r2 = requests.post(endpoint, json={"query":bg}, headers=head) r2.status_code print(json.dumps(r2.json(), indent=2)) #+END_EXAMPLE ** RSS import This tool can be used to import events from a RSS feed. Once run, it checks if there are new events to be added and updates existing ones if need be. *** Identification Each event is uniquely identified by its' url ("link" field), which is mapped into the "link" field on mobilizon.