4 - Documentation technique UNIVERS TECHNIQUE CO aka COmmunecter COMOBI on play store Installer Communecter Introduction au code MODULES MOTEUR DE RECHERCHE TERRITORIAL AGENDA NEWS CLASSIFIEDS CHAT (doc) API (doc) [COMMUNITY] #page element [MAP] [COFORM] [OCECO] NETWORK (doc) Modules exist in CO but direct links are coming soon to PEOPLE ORGANIZATIONS EVENTS PROJECTS POINTS OF INTEREST DDA : Discuss Decide and Act (doc) SOCIAL BOOKMARKING PLACES NEEDS SERVICES COMPETENCE (soon) GLOOTON : GENERIC IMPORT TOOL BABELFISH : GENERIC Semantic translation and conversion INSTANCES Basé sur le code de Communecter Territoire en transition Pacte pour la transition NOTRAGORA Retrouvez l'ensemble des COSTUMS (co personnalisé) ICI Et bientôt plein de petits CoPi (doc) OPEN SOURCE TOOLS WE USE (doc) WEKAN ROCKET CHAT NEXTCLOUD WIKI CRYPTPAD HACKMD DIALOGUEA CONNECTING THINGS TOGETHER COPI.concept (doc) INTEROPERABILITY (doc) COPEDIA OPEN SOURCE PROJECTS WE USE AND LOVE PHP MONGO DB JQUERY BOOTSTRAP METEOR NODEJS NOUN PROJECT and lots and lots and lots of pluggins ! Introduction au code N’ayez pas peur ! Le code est écrit de manière accessible afin que vous puissiez y contribuer facilement. Si vous êtes à l’aise avec les méthodes plus “standard” dans l’industrie, il est possible de coder de votre côté et de communiquer via l’API. Les discussions publiques de l'équipe de développeur se font dans le canal #codev_open. Ressources pour débuter Présentation du code en vidéo (30 minutes) Documentation de l’API Fonctionnement PHP Communauté des développeurs Pense-bête de commandes GIT Feuille de route des développeurs Architecture Le motif utilisé est le classique Modèle-vue-contrôleur. Une grosse partie du code se trouve dans le dépôt CO2 de notre Gitlab, tandis que citizenToolKit gère plutôt le backend.Installer Communecter Ubuntu 16.04 Prérequis Pour utiliser Communecter vous devez avoir Apache 2 & PHP 5.6 (Attention, ne fonctionne pas sur PHP 7) sudo apt-get install apache2 php5.6 Pour passer de la version 7 à 5.6 vous pouvez suivre la solution suivante : https://askubuntu.com/questions/761713/how-can-i-downgrade-from-php-7-to-php-5-6-on-ubuntu-16-04 Certains modules doivent être installé rewrite sudo a2enmod rewrite curl sudo apt-get install php5.6-curl mcrypt sudo apt-get install php5.6-mcrypt gd sudo apt-get install php5.6-gd mongo sudo apt-get install php5.6-mongo dom sudo apt-get install php5.6-dom Pour vérifier votre version de PHP php -v MongoDB 3.4 (Ne fonctionne pas avec la 3.6) : sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6 echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list sudo apt-get update sudo apt-get install -y mongodb-org Install Clone from GitHub : mkdir ~/dev && mkdir ~/dev/communecter mkdir ~/dev/communecter/modules cd /var/www/html/ sudo ln -s ~/communecter communecter cd ~/dev/communecter git clone https://github.com/pixelhumain/pixelhumain.git cd modules/ git clone https://github.com/pixelhumain/citizenToolKit.git git clone https://github.com/pixelhumain/co2.git ln -s co2 network git clone https://github.com/pixelhumain/api git clone https://github.com/pixelhumain/graph.git git clone https://github.com/pixelhumain/classifieds.git git clone https://github.com/pixelhumain/ressources.git git clone https://github.com/pixelhumain/places.git git clone https://github.com/pixelhumain/chat.git git clone https://github.com/pixelhumain/learn.git git clone https://github.com/pixelhumain/survey.git git clone https://github.com/pixelhumain/interop.git git clone https://github.com/pixelhumain/cotools.git git clone https://github.com/pixelhumain/eco.git cd ../ Installer les dépendances avec Composer : sudo apt install composer cd pixelhumain/ph/ composer update composer install Rename the dbconfig file : cd protected/ cp config/dbconfig.exemple.php config/dbconfig.php Si le fichier dbconfig.php n'existe pas, créer le : nano config/dbconfig.php 'mongoYii.EMongoClient', 'server' => 'mongodb://127.0.0.1:27017/', 'db' => 'pixelhumain', ); ?> Création du dossier runtime et assets mkdir runtime sudo chmod -R 775 runtime/ cd ../ mkdir assets sudo chmod -R 775 assets/ cd ../../ sudo chown -R [votreUser]:www-data pixelhumain sudo chown -R [votreUser]:www-data modules Configuration And configure Apache vhost : edit /etc/apache2/sites-available/communecter.conf : # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.example.com Activate the new vhost : sudo a2ensite communecter sudo a2enmod rewrite sudo service apache2 reload Configurer MongoDB #Making the Data folder for MongoDB mkdir data/ mkdir data/db Import les données : cd modules/co2/data unzip cities.json.zip mongoimport --db pixelhumain --collection cities --file cities.json Ajouter MongoDB au démarrage et faire le script d’utilisation : sudo nano /etc/init.d/communecterdb Ajouter ceci : #!/bin/sh # ### BEGIN INIT INFO # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Provides: unattended-upgrade-shutdown-check # Default-Start: 2 3 4 5 # Default-Stop: 0 6 # Short-Description: Check if unattended upgrades are being applied # Description: Check if unattended upgrades are being applied # and wait for them to finish ### END INIT INFO Sauvegardez : sudo chmod +x /etc/init.d/communecterdb update-rc.d communecterdb defaults update-rc.d communecterdb enable Alternative : créer le script communecterdb.sh, le rendre exécutable et l’ajouter dans /etc/rc.local Vérifier que tous les composants sont installés Accéder a l’url suivant : http://127.0.0.1/ph/test Et réglez tout les points rouges. C’est bon vous pouvez utiliser COMMUNECTER Accédez à cette adresse : http://127.0.0.1/ph/ Optionnel Interface Mongo Si vous souhaitez avoir une interface pour géré MongoDB vous pouvez télécharger Robo3T : https://robomongo.org/download Email service to cron Add crontab -e : */2 * * * * curl https://127.0.0.1/ph/co2/test/docron Use Communecter is now available : http://127.0.0.1/ph/ To try the email service, go to http://127.0.0.1/ph/co2/test/docron To use in production mode, edit index.php Update Create /var/www/html/communecter/update.sh containing : red=`tput setaf 1` green=`tput setaf 2` blue=`tput setaf 0` bgWhite=`tput setab 7` reset=`tput sgr0` Make it executable and launch it.Docker Retour au TODO de Fluidlog Proposition de Marc_Toulouse sur le chat :https://chat.lescommuns.org/channel/co_dev_open L’idée en effet est de regrouper les différents façons d’installer Communecter ici : https://wiki.communecter.org/en/installing-communect.html (c’est un clone du wiki de Github) Voir plus précisément : https://wiki.communecter.org/en/installing-communect-with-docker.html (et pas https://wiki.communecter.org/en/installing-communect-on-ubuntu-16.04.html à priori car ça ne concerne pas docker) Tibor me parle aussi du nouveau PAD : http://pad.co.tools (sur CryptoPad) : ça c’est pour faire la doc. C’est vraiment ici qu’elle doit être faite : https://wiki.communecter.org/en/installing-communect-with-docker.html : en cliquant sur le crayon, on accès au wiki de Github en mode édition (faut avoir un compte github) Installation de Communecter via docker choose community edition CE https://docs.docker.com/engine/installation example install docker ubuntu https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu Erreur avec AptGet… OK docker-ce n’était pas dispo de base, il a fallu ajouter des serveurs En fait, j’ai du suivre le post:https://gist.github.com/Stoakes/a5adb36e9211964dbf00b47d36edd181 Post-installation steps for Linux https://docs.docker.com/engine/installation/linux/linux-postinstall Installer docker-compose https://docs.docker.com/compose/install Installer Communecter git clone https://gitlab.adullact.net/pixelhumain/docker ~/pixelhumain-docker cd ~/pixelhumain-docker #pour linux docker-compose -f docker-compose.yml -f docker-compose.install.yml run ph cotools --install #ou pour windows/mac utiliser docker-compose -f docker-compose-no-build.yml -f docker-compose.install-no-build.yml run ph cotools --install Mise à jour des droits Modifier les droits pour pouvoir modifier les fichiers : Pour taper ces commandes, se mettre dans le rep :cd ~/pixelhumain-docker #modifier le group/user pour pouvoir ouvrir/modifier les fichiers sudo chown -R ${USER:=$(/usr/bin/id -run)}:$USER code/ sudo chown -R ${USER:=$(/usr/bin/id -run)}:$USER code/pixelhumain/ sudo chown -R ${USER:=$(/usr/bin/id -run)}:$USER code/modules/ sudo chown -R ${USER:=$(/usr/bin/id -run)}:$USER code/log/ Voir aussi “Getting start” : https://docs.docker.com/compose/gettingstarted/#step-3-define-services-in-a-compose-file Problème d’accès Suite à cela, je n’avais pas accès à CO. Nous avons vérifié si un container tournait (voir paragraphe plus bas) -> non Nous avons supprimé le répertoire code pour tout recommencer. docker-compose -f docker-compose.yml -f docker-compose.install.yml run ph install Explication : la il va rebuilder le container front et utiliser le container install pour faire l’install sur le front c’est pour ça que l’on a 2 fichier : docker-compose.yml docker-compose.install.yml docker-compose.install.yml ne sert que pour l’install et certaine commande Suite à ces commandes, il clone tout ce qu’il faut en local, ça prend un certain temps en fonction de votre réseau… Aller sur http://localhost:5080 La première fois, j’ai eu des messages d’erreur d’accès… Thomas m’a demandé si j’avais le répertoire :/pixelhumain-docker/code/pixelhumain/ph/vendor/ mais je ne l’avais pas… Nous avons de nouveau supprimé le répertoire code, et modifié le script /pixelhumain-docker/docker-install/Dockerfile pour y ajouter curl et php Voir la présence et lancer un container Pour savoir si docker tourne, faire "docker ps" S’il n’y a rien (à part le titre des colonnes du tableau), c’est signe qu’aucun container ne tourne. Exemple : ici, il n’y a pas de container qui tourne : CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES Là, il y en a : CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 92ed85af6a28 pixelhumaindocker_front "/usr/bin/supervisord" 4 weeks ago Up About a minute 9000/tcp, 0.0.0.0:5080->80/tcp, 0.0.0.0:5443->443/tcp, 0.0.0.0:5901->9001/tcp pixelhumaindocker_front_1 8f16ade3a72b mongo "docker-entrypoint..." 4 weeks ago Up About a minute 27017/tcp pixelhumaindocker_mongo_1 Et pour lancer un container : docker-compose -f docker-compose.yml up Inscription en local Une fois sur l’interface d’accueil de CO, il faut remplir le formulaire d’inscription, sauf que le mail d’activation n’est pas envoyé. Pour passer cette étape, on “triche” avec la commande : docker-compose -f docker-compose.yml -f docker-compose.install.yml run ph cotools --emailvalid=email@example.com (en modifiant bien sur : email@example.com par l’email qui a servi à l’inscription) On rafraîchit la page, on se loge, et ça fonctionne, on arrive dans CO ! Gérer le démarrage auto https://docs.docker.com/engine/installation/linux/linux-postinstall/#configure-docker-to-start-on-boot sudo systemctl enable docker Synchronizing state of docker.service with SysV init with /lib/systemd/systemd-sysv-install... Executing /lib/systemd/systemd-sysv-install enable docker Malgré cela, CO ne démarre pas au lancement de ma machine. Accès à Communecter Je n’ai pas encore réussi (pas essayé non plus…) à le lancer au démarrage, donc à chaque fois que je souhaite lancer CO : Je vais dans mon répertoire ~/projets/pixelhumain-docker/ Je lance docker-compose -f docker-compose.yml up Je vais sur http://localhost:5080, et ça tourne ! Tout est noté à la fin du script ci-dessus… (je dis ça, car j’ai cherché un peu car je n’avais pas lu…) Ajout de Fluidgraph dans CO Ajout de Fluidgraph dans CO2 Administration de la base NoSQL (mongoDB) Pour avoir accès à mongo en dehors du container il faut ouvrir le port Voir fichier :https://github.com/pixelhumain/docker/blob/master/docker-compose.yml J’ai du ajouter la ligne concernant l’ouverture de port comme l’exemple qui suit : services: mongo: image: mongo volumes: - ./code/data/db:/data/db ports: - "5017:27017" Cela m’a permis, via l’outil Robomongo d’ajouter une collection : { "_id" : ObjectId("59f1920bc30f30536124355d"), "name" : "DEV Config", "key" : "devParams", "mangoPay" : { "ClientId" : "communecter", "ClientPassword" : "XXXXXXXXXXX", "TemporaryFolder" : "../../tmp" } } Je ne sais pas encore à quoi ça correspond, mais on m’a dit de le faire, sinon, j’avais l’erreur : ERREUR 403 Missing Configs db.applications.key == prodParamsexists Ce qui m’a permis de faire fonctionner mon instance locale.API Accès à l’interface graphique de l’API : communecter.org/api Get : Récupérer des informations Depuis l’API vous avez la possibilité de récupérer différentes informations en provenance de Communecter : [citoyens] Citoyen [organizations] Organisation [projects] Projet [events] Événement [needs] Besoin [news] News Récupérer toutes les entités Structure /api/[project || person || organization || event || need || news]/get/ Exemple https://www.communecter.org/api/organization/get Pour voir la description du résultat aller dans la rubrique “Les attributs”. Paramétrer la recherche Vous avez la possibilité d’ajouter des paramètres pour peaufiner votre recherche : [id] Identifiant [tags] Tags [insee] Code Insee [format] Format Récupérer une entité via son identifiant /ph/communecter/data/get/type/(projects || citoyens || organizations || events || news)/id/[id_entity] Exemple : https://www.communecter.org/api/organization/get/id/57186ed894ef47210d7b242d Rechercher par tags Vous avez la possibilité de paramétrer la recherche des entités en fonctions des tags. Vous pouvez ajouter plusieurs tags qui devront être séparé par une virgule. Par défauts, si vous avez mis plusieurs tags, il suffit pour l’entité d’avoir un de ces tags pour être affiché. Si vous souhaitez que l’entité possède tout les tags alors il faut mettre le paramètre suivant : /multiTags/true Exemples : https://www.communecter.org/api/organization/get?tags=nuitdebout https://www.communecter.org/api/organization/get?tags=education,social https://www.communecter.org/api/organization/get?tags=education,social/multiTags/true Rechercher par code Insee Si vous connaissez le code Insee de votre commune, vous pouvez faire une recherche via ce code. Exemple : https://www.communecter.org/api/organization/get?insee=33402 Formats L’API prend en compte différents formats pour le résultat. Par défaut, c’est le format que propose Communecter. Nous prenons aussi en comptes les formats suivant : SCHEMA /ph/communecter/data/get/type/organizations/format/schema PLP /ph/communecter/data/get/type/citoyens/format/plp RSS /ph/api/news/get/format/rss JSONFEED /ph/api/news/get/format/jsonfeed KML /ph/api/event/get/format/kml GEOJSON /ph/api/person/get/format/geojson CSV /ph/api/person/get/format/csv Attention certains formats ne retourne pas forcement toutes les entités, voici la liste pour chaque format. COMMUNECTER [citoyens] Citoyen [organizations] Organisation [projects] Projet [events] Événement [needs] Besoin [news] News SCHEMA [citoyens] Citoyen [organizations] Organisation [projects] Projet [events] Événement [needs] Besoin City [news] News PLP [citoyens] Citoyen KML [citoyens] Citoyen [organizations] Organisation [projects] Projet [events] Événement [needs] Besoin City [news] News GEOJSON [citoyens] Citoyen [organizations] Organisation [projects] Projet [events] Événement [needs] Besoin City [news] News CSV [organizations] Organisation RSS [news] news JSONFEED [news] news Les attributs Ici, vous aurez la description de tout les attribues des différentes entités qui sont retournés via l’API. Format Communecter limit Nombre d’entités retournée next url retournant la suite des entités previous url retournant la liste précédente des entités entities toutes les entités en leurs identifiants en clé name Nom de l’entité image Url de l’image de profil de l’entité urlCommunecter Url de la fiche de l’entité sur Communecter urlApi Url qui retourne les informations d’une entité via l’API address streetAddress Numéro et nom de la rue postalCode Code postal addressLocality Nom de la commune addressCountry Nom du Pays codeInsee Code Insee de la commune geo latitude longitude geoPosition Autre format pour la position géographique de l’entité shortDescription Courte description de l’entité description Description de l’entité. email L’email de l’entité. phone L’ensemble des numéros de téléphones de l’entité ( fixe, mobile et fax) socialNetwork L’ensemble des liens vers les autres réseaux sociaux de l’entité tags Tous les tags associés à l’entité links Les différents liens que l’entité a avec les autres : memberOf Liste des organisations dont l’entité est membre projects Liste des projets dont l’entité contribue events Liste des événements dont l’entité est invitée ou participe followers Liste des citoyens dont l’entité suit. members Liste des citoyens membres de l’entité. needs Liste des besoins de l’entité. Convert : Récupérer des données en onthologie PH Depuis l’API, vous avez la possibilité de convertir les données sous différents format que vous possédez directement en onthologie PH. [geojson] GeoJson [wikipedia] Json issu de l’API de Wikidata [datagouv] Json issu de l’API de Data.gouv [osm] Json issu de l’API de Open Street Map [ods] JSon issu de l’API de OpenDataSoft (on intéroge uniquement la base SIRENE) [datanova] Json issu de l’API de Datanova [poleemploi] Json issu de l’API de Pôle Emploi [educstruct] Json issu de l’API de ScanR(structures de recherche) [educetab] Json issu de l’API de ScanR (établissements impliqués dans la recherche) [educmembre] Json issu de l’API de ScanR (membre des universités de France) [educecole] Json issu de l’API de ScanR (école doctorales accrédités) Obtenir l’ontologie ph pour un type d’élément donnée via une url Structure /ph/communecter/api/convert/geojson/type/[organizations || citoyens || events || projects]?url="http://votreurl" Exemple https://www.communecter.org/api/convert/geojson/type/organizations?url=http://umap.openstreetmap.fr/en/datalayer/306808/ Cas particuliers : les uMap Structure L’API permet de convertir les données geojson d’une uMap donnée via la paramètre “url”. On peut aussi mettre en paramètre l’URL courte d’une uMap (visible en appuyant sur le bouton partager à gauche de la uMap). Attention pour le moment, il faut que l’url soit en “http” et non pas en “https”, retirez le “s” si tel est le cas. https://www.communecter.org/api/convert/geojson/type/organizations?url=[URL] Exemples URL longue : https://www.communecter.org/api/convert/geojson/type/organizations?url=http://umap.openstreetmap.fr/en/datalayer/306808/ URL Courte : /ph/communecter/api/convert/type/organizations?url=http://u.osmfr.org/m/62176/ Obtenir l’ontologie ph pour un type d’élément donnée via un fichier Il faut envoyer à l’API le paramètre “file” via méthode POST. (en utilisant curl ou RESTED par exemple). Obtenir l’ontologie ph pour une url intérrogeant une API externe /ph/communecter/api/convert/[type interop]?url="http://votreurlinterop" Wikidata Structure /ph/api/convert/wikipedia?url=https://www.wikidata.org/wiki/Special:EntityData/[wikidataID].json Exemple Ville de Saint-Louis - WikidataID = Q47045 : /ph/api/convert/wikipedia?url=https://www.wikidata.org/wiki/Special:EntityData/Q47045.json Data.gouv Structure /ph/api/convert/datagouv?url=https://www.data.gouv.fr/api/1/spatial/zone/fr/town/[insee]/datasets Exemple Ville de Rodez - Code INSEE 12202 : /ph/api/convert/datagouv?url=https://www.data.gouv.fr/api/1/spatial/zone/fr/town/12202/datasets On va pouvoir ensuite obtenir l’ensemble des datasets de la ville mentionnée et au final parcourir l’ensemble des différents jeux de données de la ville. OpenStreetMap Structure /ph/api/convert/osm?url=http://overpass-api.de/api/interpreter?data=[out:json];node[%22name%22](poly:[geoshape]);out; Exemple Ville de Saint-Louis : /ph/api/convert/osm?url=http://overpass-api.de/api/interpreter?data=[out:json];node[%22name%22](poly:%22-21.303505996763%2055.403919253998%20-21.292626813288%2055.391189163162%20-21.282029142394%2055.381522536523%20-21.256155186265%2055.392395046639%20-21.232012804782%2055.387888015185%20-21.211100938923%2055.390619722192%20-21.199480966855%2055.382654775478%20-21.185882138486%2055.385961778627%20-21.173346518752%2055.389949958731%20-21.16327583783%2055.399563417107%20-21.14709868917%2055.405379688232%20-21.166028899095%2055.414700890276%20-21.184085220909%2055.432085218794%20-21.190290936422%2055.440880800108%20-21.195166490948%2055.462318490892%20-21.237553168259%2055.459769285867%20-21.258726107298%2055.463692709631%20-21.286021128961%2055.455515913879%20-21.294777773557%2055.419916682666%20-21.303505996763%2055.403919253998%22);out; On va pouvoir filtrer l’enssemble des noeuds qui sont présent dans le geoshape fourni et enfin filtrer tous les noeuds qui possède au moins le tag “name”. OpenDataSoft Structure On va pouvoir filtrer l’ensemble des éléments présent dans le geofilter fournit. On peut filtrer les éléments par thématique en mentionnant des refine.libapen dans l’url. /ph/api/convert/ods?url=https://data.opendatasoft.com/api/records/1.0/search/?dataset=sirene%40public&sort=datemaj&facet=categorie&facet=proden&facet=libapen&facet=siege&facet=libreg_new&facet=saisonat&facet=libtefen&facet=depet&facet=libnj&facet=libtca&facet=liborigine&rows=30&start=0&geofilter.polygon=[geofilter] Exemples Ville de Saint-Louis : /ph/api/convert/ods?url=https://data.opendatasoft.com/api/records/1.0/search/?dataset=sirene%40public&sort=datemaj&facet=categorie&facet=proden&facet=libapen&facet=siege&facet=libreg_new&facet=saisonat&facet=libtefen&facet=depet&facet=libnj&facet=libtca&facet=liborigine&rows=30&start=0&geofilter.polygon=(-21.303505996763,55.403919253998),(-21.292626813288,55.391189163162),(-21.282029142394,55.381522536523),(-21.256155186265,55.392395046639),(-21.232012804782,55.387888015185),(-21.211100938923,55.390619722192),(-21.199480966855,55.382654775478),(-21.185882138486,55.385961778627),(-21.173346518752,55.389949958731),(-21.16327583783,55.399563417107),(-21.14709868917,55.405379688232),(-21.166028899095,55.414700890276),(-21.184085220909,55.432085218794),(-21.190290936422,55.440880800108),(-21.195166490948,55.462318490892),(-21.237553168259,55.459769285867),(-21.258726107298,55.463692709631),(-21.286021128961,55.455515913879),(-21.294777773557,55.419916682666),(-21.303505996763,55.403919253998) L’exemple suivant fait la même chose que l’exemple précédent sauf qu’il filtre tous les éléments qui sont dans le secteur d’activité : Pratique dentaire /ph/api/convert/ods?url=https://data.opendatasoft.com/api/records/1.0/search/?dataset=sirene%40public&facet=categorie&facet=proden&facet=libapen&facet=siege&facet=libreg_new&facet=saisonat&facet=libtefen&facet=depet&facet=libnj&facet=libtca&facet=liborigine&rows=30&start=0&geofilter.polygon=(44.810795852605,-0.5738778170842),(44.817148298105,-0.57643460444186),(44.823910193873,-0.58695822406613),(44.818476638462,-0.60304723869607),(44.822474304509,-0.61064859861704),(44.824937843733,-0.61415033833008),(44.835177466959,-0.61079419661495),(44.841384923705,-0.62771243191386),(44.860667021743,-0.63833642556746),(44.871658097695,-0.63105127891779),(44.86227970331,-0.61630176568479),(44.854215265872,-0.59460939385687),(44.865671076253,-0.57646019656194),(44.869188961886,-0.57608874140575),(44.909402227434,-0.58088555560083),(44.908480410411,-0.57648917779388),(44.916666965125,-0.54773554113942),(44.889099273803,-0.53553255107571),(44.869138522062,-0.54141014437767),(44.868086689933,-0.53680669655034),(44.861267174723,-0.53784686147751),(44.848134506953,-0.53761462401784),(44.842390488778,-0.5422310311368),(44.836291776079,-0.54665943781219),(44.829021270567,-0.53642317794196),(44.822772234064,-0.53766321563778),(44.813135278103,-0.55606047183132),(44.810795852605,-0.5738778170842)&refine.libapen=Pratique%20dentaire Datanova Structure On récupère l’ensemble des enseignes La Poste présent dans le geofilter donné. /ph/api/convert/datanova?url=https://datanova.laposte.fr/api/records/1.0/search/?dataset=laposte_poincont&rows=30&start=0&geofilter.polygon=[geofilter] Exemple Ville de Bordeaux /ph/api/convert/datanova?url=https://datanova.laposte.fr/api/records/1.0/search/?dataset=laposte_poincont&rows=30&start=0&geofilter.polygon=(44.810795852605,-0.5738778170842),(44.817148298105,-0.57643460444186),(44.823910193873,-0.58695822406613),(44.818476638462,-0.60304723869607),(44.822474304509,-0.61064859861704),(44.824937843733,-0.61415033833008),(44.835177466959,-0.61079419661495),(44.841384923705,-0.62771243191386),(44.860667021743,-0.63833642556746),(44.871658097695,-0.63105127891779),(44.86227970331,-0.61630176568479),(44.854215265872,-0.59460939385687),(44.865671076253,-0.57646019656194),(44.869188961886,-0.57608874140575),(44.909402227434,-0.58088555560083),(44.908480410411,-0.57648917779388),(44.916666965125,-0.54773554113942),(44.889099273803,-0.53553255107571),(44.869138522062,-0.54141014437767),(44.868086689933,-0.53680669655034),(44.861267174723,-0.53784686147751),(44.848134506953,-0.53761462401784),(44.842390488778,-0.5422310311368),(44.836291776079,-0.54665943781219),(44.829021270567,-0.53642317794196),(44.822772234064,-0.53766321563778),(44.813135278103,-0.55606047183132),(44.810795852605,-0.5738778170842) Pôle Emploi Introduction On demande à avoir un token : https://entreprise.pole-emploi.fr/connexion/oauth2/access_token?realm=%2Fpartenaire avec en paramètre POST : grant_type = client_credential client_id = [identifiant] scope = [mot de passe] Ensuite on lance la requête : https://api.emploi-store.fr/partenaire/infotravail/v1/datastore_search_sql?sql=SELECT%20%2A%20FROM%20%22421692f5%2Df342%2D4223%2D9c51%2D72a27dcaf51e%22%20WHERE%20%22CITY_CODE%22=%27[insee]%27% Exemple (ville de Saint-Louis) : https://api.emploi-store.fr/partenaire/infotravail/v1/datastore_search_sql?sql=SELECT%20%2A%20FROM%20%22421692f5%2Df342%2D4223%2D9c51%2D72a27dcaf51e%22%20WHERE%20%22CITY_CODE%22=%2797414%27% Il faut indiquer en paramètre POST ses identifiants du Pôle Emploi (inscription sur emploi-store-dev.fr) et aussi mettre un token dans le HEADER : “Authorization: Bearer [token]”. Structure L’url à passer en paramètre est du type : /ph/api/convert?url=https://api.emploi-store.fr/partenaire/infotravail/v1/datastore_search_sql?sql=SELECT%20%2A%20FROM%20%22421692f5%2Df342%2D4223%2D9c51%2D72a27dcaf51e%22%20WHERE%20%22CITY_CODE%22=%27[insee]%27% Exemples Ville de Saint-Louis : /ph/api/convert?url=https://api.emploi-store.fr/partenaire/infotravail/v1/datastore_search_sql?sql=SELECT%20%2A%20FROM%20%22421692f5%2Df342%2D4223%2D9c51%2D72a27dcaf51e%22%20WHERE%20%22CITY_CODE%22=%2797414%27% ScanR Structure ScanR comporte 4 jeux de données que l’on peut intéroger : Structure de recherche publique : /ph/api/convert/educstruct?url=https://data.enseignementsup-recherche.gouv.fr/api/records/1.0/search/?dataset=fr-esr-structures-recherche-publiques-actives&facet=numero_national_de_structure&facet=annee_de_creation&facet=tutelles&facet=type_de_tutelle&facet=nature_de_tutelle&facet=nature_de_structure&facet=type_de_structure&facet=niveau_de_structure&facet=domaine_scientifique&facet=panel_erc&facet=theme_de_recherche&facet=commune&facet=unite_urbaine&facet=departement&facet=region&facet=pays&facet=comue&facet=region_avant_2016&rows=30&start=0&geofilter.polygon=[geofilter] Etablissement impliqués dans la recherche : /ph/api/convert/educetab?url=https://data.enseignementsup-recherche.gouv.fr/api/records/1.0/search/?dataset=fr-esr-etablissements-publics-prives-impliques-recherche-developpement&facet=siren&facet=libelle&facet=date_de_creation&facet=categorie&facet=libelle_ape&facet=tranche_etp&facet=categorie_juridique&facet=wikidata&facet=commune&facet=unite_urbaine&facet=departement&facet=region&facet=pays&facet=badge&facet=region_avant_2016&rows=30&start=0&geofilter.polygon=[geofilter] Membres des universités de France : /ph/api/convert/educmembre?url=https://data.enseignementsup-recherche.gouv.fr/api/records/1.0/search/?dataset=fr-esr-iuf-les-membres&rows=30&start=0&geofilter.polygon=[geofilter] Liste des écoles doctorales accréditées : /ph/api/convert/educecole?url=https://data.enseignementsup-recherche.gouv.fr/api/records/1.0/search/?dataset=fr-esr-ecoles_doctorales_annuaire&facet=numero&facet=groupe_disciplinaire&facet=toutes_les_disciplines&facet=discipline_principale&facet=localisation&facet=liste_tous_etablissements&facet=laboratoires_rattaches&facet=annee_de_creation&facet=annee_accreditation&facet=etablissement_support&facet=liste_codes_tous_etablissements&facet=identifiants_des_laboratoires&facet=libelle_unite_urbaine&facet=libelle_departement&facet=libelle_academie&facet=libelle_region&rows=30&start=0&geofilter.polygon=[geofilter] Exemples Structure de recherche publique de Saint-Louis : /ph/api/convert/educstruct?url=https://data.enseignementsup-recherche.gouv.fr/api/records/1.0/search/?dataset=fr-esr-structures-recherche-publiques-actives&facet=numero_national_de_structure&facet=annee_de_creation&facet=tutelles&facet=type_de_tutelle&facet=nature_de_tutelle&facet=nature_de_structure&facet=type_de_structure&facet=niveau_de_structure&facet=domaine_scientifique&facet=panel_erc&facet=theme_de_recherche&facet=commune&facet=unite_urbaine&facet=departement&facet=region&facet=pays&facet=comue&facet=region_avant_2016&rows=30&start=0&geofilter.polygon=(44.810795852605,-0.5738778170842),(44.817148298105,-0.57643460444186),(44.823910193873,-0.58695822406613),(44.818476638462,-0.60304723869607),(44.822474304509,-0.61064859861704),(44.824937843733,-0.61415033833008),(44.835177466959,-0.61079419661495),(44.841384923705,-0.62771243191386),(44.860667021743,-0.63833642556746),(44.871658097695,-0.63105127891779),(44.86227970331,-0.61630176568479),(44.854215265872,-0.59460939385687),(44.865671076253,-0.57646019656194),(44.869188961886,-0.57608874140575),(44.909402227434,-0.58088555560083),(44.908480410411,-0.57648917779388),(44.916666965125,-0.54773554113942),(44.889099273803,-0.53553255107571),(44.869138522062,-0.54141014437767),(44.868086689933,-0.53680669655034),(44.861267174723,-0.53784686147751),(44.848134506953,-0.53761462401784),(44.842390488778,-0.5422310311368),(44.836291776079,-0.54665943781219),(44.829021270567,-0.53642317794196),(44.822772234064,-0.53766321563778),(44.813135278103,-0.55606047183132),(44.810795852605,-0.5738778170842) Etablissement impliqués dans la recherche de Bordeaux : /ph/api/convert/educetab?url=https://data.enseignementsup-recherche.gouv.fr/api/records/1.0/search/?dataset=fr-esr-etablissements-publics-prives-impliques-recherche-developpement&facet=siren&facet=libelle&facet=date_de_creation&facet=categorie&facet=libelle_ape&facet=tranche_etp&facet=categorie_juridique&facet=wikidata&facet=commune&facet=unite_urbaine&facet=departement&facet=region&facet=pays&facet=badge&facet=region_avant_2016&rows=30&start=0&geofilter.polygon=(44.810795852605,-0.5738778170842),(44.817148298105,-0.57643460444186),(44.823910193873,-0.58695822406613),(44.818476638462,-0.60304723869607),(44.822474304509,-0.61064859861704),(44.824937843733,-0.61415033833008),(44.835177466959,-0.61079419661495),(44.841384923705,-0.62771243191386),(44.860667021743,-0.63833642556746),(44.871658097695,-0.63105127891779),(44.86227970331,-0.61630176568479),(44.854215265872,-0.59460939385687),(44.865671076253,-0.57646019656194),(44.869188961886,-0.57608874140575),(44.909402227434,-0.58088555560083),(44.908480410411,-0.57648917779388),(44.916666965125,-0.54773554113942),(44.889099273803,-0.53553255107571),(44.869138522062,-0.54141014437767),(44.868086689933,-0.53680669655034),(44.861267174723,-0.53784686147751),(44.848134506953,-0.53761462401784),(44.842390488778,-0.5422310311368),(44.836291776079,-0.54665943781219),(44.829021270567,-0.53642317794196),(44.822772234064,-0.53766321563778),(44.813135278103,-0.55606047183132),(44.810795852605,-0.5738778170842) Membres des universités de France de Bordeaux : /ph/api/convert/educmembre?url=https://data.enseignementsup-recherche.gouv.fr/api/records/1.0/search/?dataset=fr-esr-iuf-les-membres&rows=30&start=0&geofilter.polygon=(44.810795852605,-0.5738778170842),(44.817148298105,-0.57643460444186),(44.823910193873,-0.58695822406613),(44.818476638462,-0.60304723869607),(44.822474304509,-0.61064859861704),(44.824937843733,-0.61415033833008),(44.835177466959,-0.61079419661495),(44.841384923705,-0.62771243191386),(44.860667021743,-0.63833642556746),(44.871658097695,-0.63105127891779),(44.86227970331,-0.61630176568479),(44.854215265872,-0.59460939385687),(44.865671076253,-0.57646019656194),(44.869188961886,-0.57608874140575),(44.909402227434,-0.58088555560083),(44.908480410411,-0.57648917779388),(44.916666965125,-0.54773554113942),(44.889099273803,-0.53553255107571),(44.869138522062,-0.54141014437767),(44.868086689933,-0.53680669655034),(44.861267174723,-0.53784686147751),(44.848134506953,-0.53761462401784),(44.842390488778,-0.5422310311368),(44.836291776079,-0.54665943781219),(44.829021270567,-0.53642317794196),(44.822772234064,-0.53766321563778),(44.813135278103,-0.55606047183132),(44.810795852605,-0.5738778170842) Liste des écoles doctorales accréditées de Bordeaux : /ph/api/convert/educecole?url=https://data.enseignementsup-recherche.gouv.fr/api/records/1.0/search/?dataset=fr-esr-ecoles_doctorales_annuaire&facet=numero&facet=groupe_disciplinaire&facet=toutes_les_disciplines&facet=discipline_principale&facet=localisation&facet=liste_tous_etablissements&facet=laboratoires_rattaches&facet=annee_de_creation&facet=annee_accreditation&facet=etablissement_support&facet=liste_codes_tous_etablissements&facet=identifiants_des_laboratoires&facet=libelle_unite_urbaine&facet=libelle_departement&facet=libelle_academie&facet=libelle_region&rows=30&start=0&geofilter.polygon=(44.810795852605,-0.5738778170842),(44.817148298105,-0.57643460444186),(44.823910193873,-0.58695822406613),(44.818476638462,-0.60304723869607),(44.822474304509,-0.61064859861704),(44.824937843733,-0.61415033833008),(44.835177466959,-0.61079419661495),(44.841384923705,-0.62771243191386),(44.860667021743,-0.63833642556746),(44.871658097695,-0.63105127891779),(44.86227970331,-0.61630176568479),(44.854215265872,-0.59460939385687),(44.865671076253,-0.57646019656194),(44.869188961886,-0.57608874140575),(44.909402227434,-0.58088555560083),(44.908480410411,-0.57648917779388),(44.916666965125,-0.54773554113942),(44.889099273803,-0.53553255107571),(44.869138522062,-0.54141014437767),(44.868086689933,-0.53680669655034),(44.861267174723,-0.53784686147751),(44.848134506953,-0.53761462401784),(44.842390488778,-0.5422310311368),(44.836291776079,-0.54665943781219),(44.829021270567,-0.53642317794196),(44.822772234064,-0.53766321563778),(44.813135278103,-0.55606047183132),(44.810795852605,-0.5738778170842) REST Services Almost every actions could be exposed as a REST service. Register a new user url : xxxxx.communecter.org/communecter/person/register params dans le post : name string username string. Unique on the plateforme email well formated email cp existing postalCode geoPosLatitude float geoPosLongitude float pwd : non encrypted password city String Insee code pendingUserId String. Si l’utilisateur est déjà en base de données (il a été invité et son profil est temporaire), son identifiant est passé en paramètre. Dans ce cas l’utilisateur n’est pas créé, mais il est mis à jour. Retour (json) : result boolean msg String : message d’erreur id identifiant de l’utilisateur nouvellement créé. Fonctionnement : L’utilisateur est créé en base de données. Il n’est pas encore validé et ne pourra pas se logguer Un mail lui est envoyé avec un lien de validation pour activer son compte En version bêta, il y a un flag betaTester qui est positionné pour filtrer les utilisateurs bêta testeur. Par défaut, il est à false. Le code utilisé est ici : citizenToolKit/controllers/person/RegisterAction.php (lien mort)CoPi Une instance de Communecter installée sur une Raspberry Pi ### Features Installation de CO sur une debian (apache, mongoDb) Un COPI peut se connecter à un autre CoPi Matériel disponible CO Light Raspberry Pi Micro Camera Mode Connecté ConnecTIC : (Domino, 3G, LAN, Partage de connections) CoPiMix Agrégateur de source CoPi CoPi Copy Sauvegarde d’instance CoPi CoPi Bank Système de monétisation interne à une organisationInteropérabilité Vue d’ensemble du chantier sur l’interopérabilité À gauche, la liste des sources extérieurs sur lesquelles on récupère les données : Wikidata Wikipédia OpenStreetMap OpenDataSoft (la base SIRENE) Data.gouv Datanova (les enseignes La Poste) Pôle Emploi SCANR Au milieu, le processus de Conversion des données (détails sur le prochain schéma) A droite, l’affichage des données converties sur le site de Communecter ainsi que des exemple d’usage de ces données par des sites extérieurs. Conversion des données sémantiques We interoperate with using their API Wikidata For any city, We retreive main information available on Wikidata The process is the following : We choose a geographic scope (a country) to filter We call our own semantic convert system (doc avaible here) : The convert system will interrogate the Wikidata API to get data in JSON. The next exemple is the data for the city of Saint-Denis, capital city of Réunion island : And convert this data in the pivot language named “PH onthology” /ph/api/convert/wikipedia?url=https://www.wikidata.org/wiki/Special:EntityData/Q47045.json Exemple Wikidata here Here are the mapping Source’s data PH onthology itemLabel.value name coor.latitude geo.latitude coor.longitude geo.longitude item.value url itemDescription.value description We’ll want to contributing back any extra data we can offer with COpédia (coming soon) DBpedia For any city, We retreive main information available on Wikipedia OpenStreetMap For any city, we retreive main information avaible on OSM The process is the following : We choose a geographic scope (a country) to filter We call our own semantic convert system (doc avaible here) : The next exemple is all the OSM data of the city of Saint-Louis : http://overpass-api.de/api/interpreter?data=[out:json];node[%22name%22](poly:%22-21.303505996763%2055.403919253998%20-21.292626813288%2055.391189163162%20-21.282029142394%2055.381522536523%20-21.256155186265%2055.392395046639%20-21.232012804782%2055.387888015185%20-21.211100938923%2055.390619722192%20-21.199480966855%2055.382654775478%20-21.185882138486%2055.385961778627%20-21.173346518752%2055.389949958731%20-21.16327583783%2055.399563417107%20-21.14709868917%2055.405379688232%20-21.166028899095%2055.414700890276%20-21.184085220909%2055.432085218794%20-21.190290936422%2055.440880800108%20-21.195166490948%2055.462318490892%20-21.237553168259%2055.459769285867%20-21.258726107298%2055.463692709631%20-21.286021128961%2055.455515913879%20-21.294777773557%2055.419916682666%20-21.303505996763%2055.403919253998%22);out%2030; Here are the mapping Source’s data PH onthology tags.name name lat geo.latitude long geo.longitude type type tags.amenity tags.0 Exemple OSM here We’ll want to contributin back any extra data we can offer with COSM (coming soon) Contribuez à OSM COSM a pour but donner à l'utilisateur une meilleur visibilité des éléments OSM d'un territoire, de pouvoir contribuez a enrichir les tags OSM d'un OSM. COSM permet à l'utilisateur de pouvoir lister l'intégralité des éléments OSM pour un scope géographique (uniquement les villes pour le moment). Les éléments sont afficher en bleu s'il ont un type. C'est à dire, soit : un tag "amenity" un tag "place" un tag "office" un tag "leisure" un tag "shop" L'utilisateur peut à tout moment cliquer sur le bouton "Voir tous les tags" pour ... voir tous les tags de l'élément OSM. Dans le cadre listant tous les tags de l'élément l'utiliseur peut en cliquant sur "Modifier/Ajouter un tag" ajouter ou modifier un tag. Pour on ne peut ajouter que les 5 tags cités plus haut. L'information sera directement pusher vers la page OSM de l'élément en question. Data.gouv For any city, we retreive main information of the organizations placed in this city The process is the following : We choose a geographic scope (a country) to filter We call our own semantic convert system (doc avaible here) : The module will find all the organizations placed in the geographic scope filter and then extract all the data in the differents datasets available. The next exemple is all the data of the different structure of Méto-France, meteorological center of France. https://www.data.gouv.fr/api/1/datasets/54a12162c751df720a04805a/ Here are the mapping Source’s data PH onthology slug name page url tags[] tag[] item.value url owner creator Exemple Data.gouv here Pôle emploi For any city, we retreive all the job offer. (no exact localisation of the job place) The process is the following : We choose a geographic scope (a country) to filter We call our own semantic convert system (doc avaible here) : To get data with the Pôle emploi’s API, a token is needed. The next exemple fetch all the job offer of the city of Saint-Louis. https://api.emploi-store.fr/partenaire/infotravail/v1/datastore_search_sql?sql=SELECT%20%2A%20FROM%20%22421692f5-f342-4223-9c51-72a27dcaf51e%22%20WHERE%20%22CITY_CODE%22=%2797414%27%20LIMIT%2030 OpenDataSoft (SIREN database) For any city, we retreive all the organizations and the association of the SIREN’s database. The process is the following : We choose a geographic scope (a country) to filter We call our own semantic convert system (doc avaible here) : The next exemple will fetch all the data in the SIRENE database for the city of Saint-Louis. https://data.opendatasoft.com/api/records/1.0/search/?dataset=sirene%40public&facet=categorie&facet=proden&facet=libapen&facet=siege&facet=libreg_new&facet=saisonat&facet=libtefen&facet=depet&facet=libnj&facet=libtca&facet=liborigine&rows=30&start=0&geofilter.polygon=(-21.303505996763,55.403919253998),(-21.292626813288,55.391189163162),(-21.282029142394,55.381522536523),(-21.256155186265,55.392395046639),(-21.232012804782,55.387888015185),(-21.211100938923,55.390619722192),(-21.199480966855,55.382654775478),(-21.185882138486,55.385961778627),(-21.173346518752,55.389949958731),(-21.16327583783,55.399563417107),(-21.14709868917,55.405379688232),(-21.166028899095,55.414700890276),(-21.184085220909,55.432085218794),(-21.190290936422,55.440880800108),(-21.195166490948,55.462318490892),(-21.237553168259,55.459769285867),(-21.258726107298,55.463692709631),(-21.286021128961,55.455515913879),(-21.294777773557,55.419916682666),(-21.303505996763,55.403919253998) Here are the mapping Source’s data PH onthology fields.l1_declaree name fields.categorie type fields.siret shortDescription fields.coordonnees.0 geo.latitude fields.coordonnees.1 geo.longitude fields.libapen tags.0 Exemple OpenDataSoft here ScanR ( National Education ) For any city, we retreive main information from the national education of France The process is the following : We choose a geographic scope (a country) to filter We call our own semantic convert system (doc avaible here) : The next exemple fetch all the actives research strutures of the city of Bordeaux : https://data.enseignementsup-recherche.gouv.fr/api/records/1.0/search/?dataset=fr-esr-etablissements-publics-prives-impliques-recherche-developpement&facet=siren&facet=libelle&facet=date_de_creation&facet=categorie&facet=libelle_ape&facet=tranche_etp&facet=categorie_juridique&facet=wikidata&facet=commune&facet=unite_urbaine&facet=departement&facet=region&facet=pays&facet=badge&facet=region_avant_2016&rows=30&start=0&geofilter.polygon=(44.810795852605,-0.5738778170842),(44.817148298105,-0.57643460444186),(44.823910193873,-0.58695822406613),(44.818476638462,-0.60304723869607),(44.822474304509,-0.61064859861704),(44.824937843733,-0.61415033833008),(44.835177466959,-0.61079419661495),(44.841384923705,-0.62771243191386),(44.860667021743,-0.63833642556746),(44.871658097695,-0.63105127891779),(44.86227970331,-0.61630176568479),(44.854215265872,-0.59460939385687),(44.865671076253,-0.57646019656194),(44.869188961886,-0.57608874140575),(44.909402227434,-0.58088555560083),(44.908480410411,-0.57648917779388),(44.916666965125,-0.54773554113942),(44.889099273803,-0.53553255107571),(44.869138522062,-0.54141014437767),(44.868086689933,-0.53680669655034),(44.861267174723,-0.53784686147751),(44.848134506953,-0.53761462401784),(44.842390488778,-0.5422310311368),(44.836291776079,-0.54665943781219),(44.829021270567,-0.53642317794196),(44.822772234064,-0.53766321563778),(44.813135278103,-0.55606047183132),(44.810795852605,-0.5738778170842) Here are the mapping : Source’s data PH onthology fields.libelle name fields.site_web shortDescription fields.geolocalisation.0 geo.latitude fields.geolocalisation.1 geo.longitude Exemple ScanR here Datasets used : Public or private research and development structures Member of the university institute of France Datanova ( La Poste ) For any city, we retreive the location of all buildings of La Poste The process is the following : We choose a geographic scope (a country) to filter We call our own semantic convert system (doc avaible here) : The next exemple will fetch all La Poste buildings localised in the city of Saint-Louis. https://datanova.laposte.fr/api/records/1.0/search/?dataset=laposte_poincont&rows=30&start=0&geofilter.polygon=(-21.303505996763,55.403919253998),(-21.292626813288,55.391189163162),(-21.282029142394,55.381522536523),(-21.256155186265,55.392395046639),(-21.232012804782,55.387888015185),(-21.211100938923,55.390619722192),(-21.199480966855,55.382654775478),(-21.185882138486,55.385961778627),(-21.173346518752,55.389949958731),(-21.16327583783,55.399563417107),(-21.14709868917,55.405379688232),(-21.166028899095,55.414700890276),(-21.184085220909,55.432085218794),(-21.190290936422,55.440880800108),(-21.195166490948,55.462318490892),(-21.237553168259,55.459769285867),(-21.258726107298,55.463692709631),(-21.286021128961,55.455515913879),(-21.294777773557,55.419916682666),(-21.303505996763,55.403919253998) Here are the mapping Source’s data PH onthology fields.libelle_du_site name recordid type fields.adresse address.streetAddress fields.latlong.0 geo.latitude fields.latlong.1 geo.longitude fields.libapen tags.0 Exemple Datanova here Smart Citizen (coming soon) onclick : we’ll show all SCK kits for a given city Umaps (coming soon) POI’s of type geoJson, on click we show the content on our map WordPress RSS (coming soon) any WP blog’s RSS can be pluggued to an elements wall using an iframe FramaPads users can use Framapads from inside CO(simple Iframe) Copédia Une autre façon de voir Wikipédia ... Accessible depuis l'url suivante : /co2/#interoperability.copedia Dans Copédia, le but est de permettre à l'utilisateur d'avoir une autre vision d'une page Wikipédia, de faciliter sa recherche et de la rendre plus intuitive. Consulter la données Wikipédia Copédia permet en selectionnant un scope géographique (uniquement les villes pour le moment) de lister tous les arcticles Wikipédia en liens avec la page Wikipédia de la ville selectionné (tout liens hypertexte renvoyant vers une autre page Wikipédia). Les liens Wikipédia listés sont ainsi catégorisés parmis 5 grands types : Evenement Organisation Lieu Personne Autre (Possède un type mais qui ne rentre pas dans les catégories précedemment citées) Indéfini (Ne possède pas de type) Il est possible à tous moment de pouvoir filtrer parmis ces 6 grands types et ainsi obtenir par exemple uniquement les personnes d'une page Wikipédia. Copédia met également les dates en relations avec certains éléments, dans une frise chronologique. Les dates que Copédia affiche sont : La date de début d'un évenement (un point) ou alors toute la durée de l'évenement (si possible) La date de création d'une organisation La date de naissance d'une naissance Pour tous les éléments listés il est possible de : Consulter leur page Wikipédia (en cliquant sur l'icone de Wikipédia) Consulter leur page DBPédia (en cliquant sur l'icone de DBPédia) Consulter leur page Wikidata (en cliquant sur l'icone de Wikidata) Consulter un résumé de la page Wikipédia (avec photo si disponible) de la page Wikipédia de l'élément (en cliquant sur le nom de l'élément) Effectuer une "recherche Copédia" listant l'intégralité des liens Wikipédia contenu dans la page Wikipédia de l'élément ciblé et ainsi pouvoir répéter tous le processus décrit plus haut. (en cliquant sur l'icone de Copédia) Contribuer à Wikipédia Si un élément ne possède pas de type, il est possible d'ajouter vous même un type à cet élément en cliquant sur le bouton "Ajouter un type (Wikidata)" qui va permettre à l'utilisateur de pusher lui même un type directement dans la page Wikidata de l'élément parmis ces 4 grands type : Personne Lieu Organisation Evenement Configuration des outils à usage interne English versionCréer une application ou un élément Définition CO2 est le nom du module correspondant à la 2nd version du module Communecter (www.communecter.org). Le module CO2 fait parti du projet PixelHumain, au même titre que d'autres modules développés au sein de PixelHumain (qu'est qu'un module ?). CO2 a lui même été construit de façon à pouvoir intégrer facilement de nouvelles applications, et les activer/désactiver très facilement, via 1 seul fichier de configuration : https://github.com/pixelhumain/co2/blob/master/config/CO2/params.json Les applications actuellement activées pour le site communecter.org sont : welcome, recherche, agenda, annonces, live, page, et info. Ce fichier sert à configurer un certain nombre de paramètres pour chaque application, ce qui permet de configurer très rapidement une nouvelle app, sans toucher au code commun qui gère toutes les applications. Cela permet aussi de mettre en place des instances différentes de communecter.org (exemple : autrerezo.org, makietjichel.com, ou autres...), sur lesquelles les administrateurs de l'instance peuvent activer et désactiver les applications qu'ils souhaitent utiliser, sans avoir à supprimer ou modifier du code. Les développeurs peuvent aussi créer de nouvelles applications à volonté. Créer une nouvelle application dans CO2 1 - Ajouter l'application dans le fichier /modules/co2/config/CO2/params.json, en suivant l'exemple suivant : Il convient bien évidemment de remplacer "#nomdelapplication" par le nom de votre application, les titres ect ... Pour l'icône, choisir un nom parmi cette liste : http://fontawesome.io/icons/ "#nomdelapplication": { "inMenu" : true, "useHeader" : true, "open" : true, "subdomain" : "nomdelapplication", "subdomainName" : "Nomdelapplication", "hash" : "#app.nomdelapplication", "icon" : "nomDeLIconeFontawesome", "mainTitle" : "Nom de l'application", "placeholderMainSearch" : "Rechercher dans ..." }, (il est conseillé d'indiquer tous les paramètres, mais il est possible d'en enlever ou d'en rajouter selon vos besoins.) 2- Ajouter une nouvelle fonction dans le fichier AppController.php du module CO2 Ouvrir le fichier /modules/co2/controllers/AppController.php et rajouter par exemple : public function actionNomdelapplication(){ CO2Stat::incNbLoad("co2-nomdelapplication"); echo $this->renderPartial("nomdelapplication", array(), true); } 3- Créer les liens vers les actions Dans /modules/co2/components/CommunecterController.php, il faut ajouter votre lien dans l'array "app" : (l'array app se situe environ à la ligne 460 du fichier) "app" => array( "nomdelapplication" => array('href' => "/ph/communecter/app/nomdelapplication", "public" => true), ), 4- Créer la vue Elle est appelée par le contrôleur pour gérer l'affichage (code HTML, CSS, JS). Créer le fichier /modules/co2/views/app/nomdelapplication.php On peut inclure le code d'une autre vue en utilisant $this->renderPartial 5- Accéder à votre application Bravo ! Maintenant vous n'avez plus qu'à accéder à votre application grâce à l'url suivante : http://127.0.0.1/ph/co2#nomdelapplication Créer un nouvel élément dans CO2 Communecter permet déjà de gérer plusieurs éléments : citoyens, organisations, projets, événement, news, point d'intérets, annonces, etc...) Voici la marche à suivre pour ajouter et gérer un nouvel élément : (si vous créez une nouvelle application, vous aurez probablement besoin de gérer un (ou plusieurs) nouveau(x) type(s) d'élément(s)) 1- Créer un nouveau controller dans le module CitizenToolKit Créer le dossier /modules/citizenToolKit/controllers/nomdelelement Ce dossier contiendra l'ensemble de la logique métier. A l'intérieur de ce dossier, créer les actions dont vous avez besoin. IndexAction est l'action par défaut. Pour créer une action, créer un fichier comme "/modules/citizenToolKit/controllers/nomdelelement/IndexAction.php" qui contiendra par exemple : getController(); $params = array(); $params["itemId"] = $id; $params['itemType'] = $type; if(Yii::app()->request->isAjaxRequest) echo $controller->renderPartial("index", $params,true); else $controller->render( "index" , $params ); } } Et le fichier "/modules/citizenToolKit/controllers/nomdelelement/AutreAction.php" class AutreAction extends CAction { public function run() { ... } } Créer les autres actions de la même manière : "/modules/citizenToolKit/controllers/nomdelelement/searchAction.php" "/modules/citizenToolKit/controllers/nomdelelement/saveAction.php" etc 2- Créer un nouveau modèle dans le module CitizenToolKit (si besoin) Créer le fichier /modules/citizenToolKit/models/nomdelelement.php * Date: dd/mm/yyyy */ class NomdelelementController extends CommunecterController { protected function beforeAction($action) { parent::initPage(); return parent::beforeAction($action); } public function actions() { return array( 'index' => 'citizenToolKit.controllers.nomdelelement.IndexAction', 'autre' => 'citizenToolKit.controllers.nomdelelement.AutreAction' ); } } L'array retourné par la fonction actions() contient l'essemble des pages qui seront traitées par les classes précédemment créées dans le module CitizenToolKit. 4- Créer les liens vers les actions Dans /modules/co2/components/CommunecterController.php, il faut créer les liens vers les actions (qui afficheront les sous pages) dans l'array $pages : "nomdelelement" => array( "index" => array("href" => "/ph/communecter/nomdelelement/index", "public" => true), "autre" => array("href" => "/ph/communecter/nomdelelement/autre", "public" => true) ), 5- Créer la vue Elle est appelée par le contrôleur pour gérer l'affichage (code HTML, CSS, JS). Créer le dossier /modules/co2/views/nomdelelement puis fichiers nommés en fonction du nom des actions : /modules/co2/views/nomdelelement/index.php /modules/co2/views/nomdelelement/autre.php 6- Accéder à l'élément http://127.0.0.1/co2/nomdelelement/index ou http://127.0.0.1/co2/nomdelelement/autreCréer un COstum Comment créer votre propre COstum Vous êtes autonome et vous souhaitez créer votre propre COstum de A à Z, nous allons vous expliquer les étapes pour mettre en place votre COstum. Création d’un élément Pour créer votre COstum, vous devrez le créer un élément, pour cela rendez-vous sur votre plateforme communecter installer sur votre machine et créer un élément qui doit être soit une organisation soit un projet. Dans votre base de données, ajouter à votre élément la ligne suivante : costum : { slug : votreSlugCostum } Le slug de votre COstum doit correspond à celui que vous l’avez donné dans votre fichier json, en général le nom du slug dans costum et le même que celle de votre élément. Préparer le fichier json de votre COstum Vous devrez créer un fichier json dans le dossier qui se trouve dans costum.data. Le nom du fichier doit être indique à celui de votre slug élément. Nous vous conseillons de récupérer le code basant sur l’un des COstums que nous avons créée dans un premier temps puis de vous renseigner sur https://www.communecter.org/costum/ pour mieux comprendre la structure de la donnée e Mise en place du COstum Crée un dossier dans costum.view.custom.nomDeVotreSlug. Et dans ce dossier, crée le fichier home et fait le pointer depuis votre fichier json, vous pouvez ensuite tester votre costum depuis http://127.0.0.1/ph/costum/co/index/id/votreNomElement. Ou rendez-vous sur votre page élément et cliquer sur le bouton “Has costum".ActivityPub Informations générales Comment utiliser ActivityPub Pour utiliser ActivityPub (AP) vous devrez avoir un acteur accessible en public. Le format de votre acteur doit être en JSON-LD. Votre acteur doit ressembler à ceci : exemple acteur sur le site communecter partir développement. L'id doit correspond à l'URL du document, tous les liens doivent être en HTTPS. Vous aurez besoin d'une inbox car les instances qui utilisent AP ont besoin de savoir si un acteur possède une inbox. Chaque acteur doit avoir une paire de clés (publique et privée) qui peut être générée avec openssl. JSON ne prend en charge les sauts de ligne, on doit remplacer les sauts de ligne par \n (pour la partie publicKeyPEM). Le Webfinger permet de demander à un site web s'il a un utilisateur correspondant au nom recheché. Ce dernier doit répondre au webfinger en renvoyant les liens de ressource correspondants. Le noeud final d'un Webfinger se trouve toujours en /.well-known/webfinger et recevoir des requêtes telles que /.well-known/webfinger?resource=acct:name@my-example.com. Pour pouvoir envoyer un message (par exemple avec le verbe Create), il est nécessaire d'avoir l'inbox de la personne concernée et d'utiliser une signature HTTP qui permettra d'authentifier l'utilisateur envoyant le message. Une signature HTTP est un en-tête HTTP signé par la paire de clés RSA. Pour avoir plus d'information sur la création d'une signature HTTP, visitez le lien suivant : How to implement a basic ActivityPub server. Liens pratiques : Setting Up a WebFinger Server How to implement a basic ActivityPub server ActivityPub W3 Decentralizing Social Interactions with ActivityPub Développement en cours (Tony et Pierre) Réalisation d'un acteur AP sur Communecter J'ai créé une API qui permet de générer un acteur AP sur communecter, vous pouvez trouver un exemple en cliquant ici. Petite précision : la clé publique est au format brute. Comment ça fonctionne : Vous devrez indiquer dans le lien l'ID de la personne ici : http://dev.communecter.org/api/activitypub/actor/id/ + id. Fichier modifié : TranslateActivityStream.php / Rest.php. Fichier créé : ActivityPubController.php / ActorAction.php. Création d'un client mastodon Nous avons créé avec Pierre un client Mastodon qui permet de poster/récupérer les statuts, récupérer les followers et voir la timeline publique en utilisant l'API REST de Mastodon. Cette preuve de concept se base sur la librairie mastodon.js par Kirschn. Vous pouvez retrouver nos codes sur le gitlab de l'adullact: mastodon_api Test d'un serveur express-activitypub en nodejs J'ai suivi ce tutoriel là pour pouvoir envyer un message sur mamot.fr : Decentralizing Social Interactions with ActivityPub. Pierre a détaillé plus en bas comment réaliser le tutoriel. Remarque constatée : Pour pouvoir voir un message sur mamot.fr, nous étions dans l'obligation de suivre notre acteur créé par express activitypub. Sans cela, il nous est impossible de voir nos message dans la timeline. Ce problème est réccurent quand on a tenté avec un compte Pixelfed de communiquer avec mamot.fr. La réalisation d'une inbox (non fonctionnelle) Je me suis basé sur le script crée par Darius Kazemi sur son tutoriel Decentralizing Social Interactions with ActivityPub. Malheureusement je n'arrive pas à faire fonctionner mon inbox car je n'arrive pas a encoder la signature. Création d'un client Mastodon Utilisation de l'API Mamot pour pouvoir afficher les timelines publiques, locales et ajouter un post. Documentation de Mastodon Mon code source est disponible sur gitlab Code Source Ajout d'un acteur ActivityPub sur l'API de Communecter Afin d'avoir un aperçu du format d'un acteur ActivityPub en ajoutant votre id a la fin du lien mon lien pour accéder à l'acteur + id Test d'envoi d'un message sur Mamot Taper la commande git clone https://github.com/dariusk/express-activitypub.git dans votre terminal. Installer ngrok, en suivante les instructions https://ngrok.com/download. Taper la commande /.ngrok/http 3000 Ensuite allez dans le dossier express-activityPub, modifier le dossier config.json dans route. Mettre un nom d'utilisateur Mettre un mot de passe Le port sera 3000, et le domain sera l'adresse en https de ngrok, mais il faut retirer le https, pour obtenir ceci exemple: d40f1818.ngrok.io Taper la commande node index.js Acceder a l'url du site en https et rajouter admin exemple: [https://d40f1818.ngrok.io/admin](https://d40f1818.ngrok.io/admin) Crée un compte test saisissez le nom d'utlisateur et le mot de passe, ensuite il y aura des données qui seront générés, afficher le account WebFinger url, copier le suject sans la acct: Connecter vous a https://mamot.fr. Rechercher le webfinger url, cliquer sur le bouton pour follow. Ensuite saisir test dans account name, Copier coller l'API Key, et saisir votre message exemple : Hello world ! Et vous pourrez voir le message envoyer sur mtps://mamot.frMediaWiki Introduction Cette partie du module interop, cherche en cas de mediawiki existant à le connecter avec communecter et de permettre via un bouton a créer des éléments du type de la page du wiki, ou en cas d'élément présent de fournir le lien. MediawikiController /interop/mediaWiki/index Si pas de mediawiki connécté => return $this->renderPartial("interop.views.create.index"); => dynForm insertWikiForm (assets/forms/insertWiki.js). => /interop/mediaWiki/chooseCategory qui insert nom du wiki et url du wiki en db Sinon return $this->renderPartial("interop.views.default.indexMediaWiki"); /interop/mediaWiki/chooseCategory Ici on vérifie qu'un médiawiki avec l'url rentré par l'utilisateur n'existe pas deja en db return $this->renderPartial("interop.views.create.index"); dynForm insertCatWikiForm (assets/forms/chooseCat.js) => /interop/mediaWiki/insertCat qui insert le choix de l'user des catégorie en fonctions des élément acteurs(person, organization), ressources, projets. Sinon return $this->renderPartial("interop.views.default.indexMediaWiki"); /interop/mediaWiki/menuLeft Comme son nom l'indique cette route s'occupe de chercher la data pour le menuleft et renvoie la vue avec les differente page en accordeon dans menu left. return $this->renderPartial("interop.views.menus.pages"); /interop/mediaWiki/page Cette fois c'est pour la data d'une page spécifique. Tout un process est en route dans les models afin de cherché la data sur le wiki et la trier pour la rendre a la celon toujours le méme schema. Un tour est fait dans citizenToolKit pour le convert et translate de la data du wiki. return $this->renderPartial("interop.views.menus.pages"); /interop/mediaWiki/edit Ici la route est appelé en cas de page communecter au méme nom que sur le wiki, et choix de l'user de marquer la page du wiki ce cette présence. !! Attention ici un réglage sur le wiki est a faire afin d'intégrer la propriétés |pageCo= dans le modéle des pages du wiki. renvoi une string message sur le succés ou non de l'opérationModule Graph Module graph communecter analyse de l'architecture modele vue controlleur< comprendre le fonctionnemment d'un controlleur utilisation de la librairie D3.js analyse du module graph mise place d'un controlleur dans le module graph mise en place d'une vue dans le module graph manipulation de données en json 1manipulation d'une base de données json mettre des données sur le graph("name") réapprentissage de l'algorithmique apprendre a récursivité (fibonnaci) Le graph nodes and edges (d3follow) Dans le controlleur (D3FollowAction) : J'ai fait apelle a la base de données pour avoir les données sur les citoyens, quelle sont leurs - projets, leurs événements, leurs organisations, leurs followers... J'ai modifier le tableau $root pour achicher les données au bon format json du graph (nodes and edges). J'ai fait une sucssesion de condition avec (if , elseif , else , foreach) pour remplire le tableau $root avec les données de le base de données ( "name"). Dans la vue (d3follow) Mettre les données du tableaux $root dans une variable et utiliser (json encode) Ajout des balises script de d3js pour faire apelle a la librarie de D3. Remdre les nodes cliquables (si on clique sur la node d'un follower sa affiche son propre graph avec ses propres données). Faire un fonction couleur pour les principaux nodes du graph. Autre j'ai fait d'autre type de graph(de la meme façon que le graph nodes and edges). graph avec des barre, graph ciculaire, graph hierarchical. Un algorithme récursif (fibonnaci) en javascript. Dans le module graph Création du controller LinearAction et de la view Linear pour mon style de graphe choisie Je me suis basé sur D3Action et de la view pour le principal Les modifications apportés au controller : modification de la requête root pour s'adapter au format de donnée du graphe L'affichage du nouveau graphe est simple car rien qu'avec la base du graphe D3, l'affichage des nodes est possible modification dans la boucle foreach de "links" pour s'adapter au nouveau graphe et ainsi afficher les noms de chaque organisation, projets, évènements... ajout des données comme : "Mes experiences ", "Sondages","Actions", "Abonnées" : une boulce pour chaque catégorie qui parcours la base de donnée et l'affiche comme les autres données comme projets ajout de nodes cliquable : juste après la dernière donnée (dernière organisation ou projet), une node "ajouter" est visible et ouvre le formulaire de la catégorie choisie (formulaire d'ajout d'organisation ou de projet) ajout d'une node libre : à la fin du graphe il y a une node que lorsque l'on clique un formulaire s'affiche. Ce formulaire permet d'ajouter une donnée libre au graphe Modification de la view : ajout de l'algorithme du graphe ajout des librairies d3.js Modification de la fonction "click" pour ajouter des liens sur les nodes : exemple en cliquant sur une organisation cela affiche le graphe de l'organisation ajout des liens sur les nodes "Ajouter..." qui affiche le formaulaire de la catégorie choisie. Pour ce faire il fallait aller chercher les librairies et les formulaires appelé "dynform" Ajout d'une fonction Color qui affiche les mêmes couleurs que le site voici mon lien gitlab avec ton mon travail