Générer votre profil github dynamiquement en python
Publié le :

Github permet de personnaliser son profil avec un simple fichier
Readme. Pour l’activer rien de plus simple, il suffit juste de créer un
repository portant le même nom que votre compte github.
Par exemple, mon compte github se nomme stephrobert, il a suffit donc que
je crée un repository stephrobert et d’y déposer un fichier Readme:MD
dedans. Dans ce fichier, vous pouvez mettre du contenu au format markdown ou
html.

Vous pouvez vous inspirer de cette longue liste de profils ↗.
Rendre son profil github dynamique
Rien de plus simple il suffit d’utiliser le langage de votre choix, celui que
vous maîtrisez. Personnellement, je l’ai écrit en Python.
Pour cela plutôt que d’écrire tout le code, j’ai décidé d’utiliser le package
python profile-readme ↗.
Au lieu de faire un fork du projet et vu que ce package peut être utilisé dans comme librairie, je vous propose de vous montrer comment y arriver le plus simplement et d’y ajouter tout ce qui vous ferait plaisir.
Création de votre projet
J’utilise poetry comme gestionnaire de packages python. Commençons par
initialiser le projet et ajoutons le package :
pip install poetrypoetry init
This command will guide you through creating your pyproject.toml config.
Package name [test]: stephrobertVersion [0.1.0]:Description []:Author [Stephane Robert <stephane.robert.28@gmil.com>, n to skip]: nLicense []:Compatible Python versions [^3.10]:
Would you like to define your main dependencies interactively? (yes/no) [yes] noWould you like to define your development dependencies interactively? (yes/no) [yes] noGenerated file
[tool.poetry]name = "stephrobert"version = "0.1.0"description : ""authors = ["Your Name <you@example.com>"]readme = "README.md"
[tool.poetry.dependencies]python = "^3.10"
[build-system]requires = ["poetry-core"]build-backend = "poetry.core.masonry.api"
Do you confirm generation? (yes/no) [yes]Maintenant ajoutons le package profile-readme :
poetry add profile-readmeCreating virtualenv stephrobert-CHLv_kh8-py3.10 in /home/vagrant/.cache/pypoetry/virtualenvsUsing version ^0.1.2 for profile-readme
Updating dependenciesResolving dependencies... (0.6s)
Writing lock file
Package operations: 19 installs, 0 updates, 0 removals
• Installing attrs (22.1.0) • Installing certifi (2022.6.15.1) • Installing charset-normalizer (2.1.1) • Installing exceptiongroup (1.0.0rc9) • Installing idna (3.3) • Installing six (1.16.0) • Installing urllib3 (1.26.12) • Installing appdirs (1.4.4) • Installing cattrs (22.1.0) • Installing click (8.1.3) • Installing markupsafe (2.1.1) • Installing requests (2.28.1) • Installing url-normalize (1.4.3) • Installing click-help-colors (0.9.1) • Installing jinja2 (3.1.2) • Installing python-dateutil (2.8.2) • Installing python-dotenv (0.21.0) • Installing requests-cache (0.9.6) • Installing profile-readme (0.1.2)Pour ajouter des packages qui ne sont utilisés que pour le développement.
Exemple black le formateur python :
poetry add -- group dev blackUsing version ^22.8.0 for black
Updating dependenciesResolving dependencies... (0.2s)
Writing lock file
Package operations: 5 installs, 0 updates, 0 removals
• Installing mypy-extensions (0.4.3) • Installing pathspec (0.10.1) • Installing platformdirs (2.5.2) • Installing tomli (2.0.1) • Installing black (22.8.0)Vous devriez obtenir ce fichier :
[tool.poetry]name = "stephrobert"version = "0.1.0"description : ""authors = ["Your Name <you@example.com>"]readme = "README.md"
[tool.poetry.dependencies]python = "^3.10"profile-readme = "^0.1.2"
[tool.poetry.group.dev.dependencies]black = "^22.8.0"
[build-system]requires = ["poetry-core"]build-backend = "poetry.core.masonry.api"Écriture du générateur de profil github
Il faut créer deux fichiers. Le premier se nomme build.py :
from profile_readme import get_github_context, ProfileGenerator
if __name__ == "__main__": context = {} # If you don't need the GitHub data you can remove the next line context.update(**get_github_context('votre_compte')) ProfileGenerator.render( template_path="README-TEMPLATE.j2", output_path="README.md", context=context )Remplacez votre_compte par le nom de votre compte github. Et un second
fichier qui se nomme README-TEMPLATE.md : avec ce contenu :
# Hey! Nice to see you
Welcome to my page!I'm my_name, a geek from **Lille, France**....
{% if USER.blog %} **My blog**: [myblog.exemple.com](https://myblog.exemple.com){% endif %}Maintenant pour générer le fichier Readme.md, il suffit de lancer votre programme python :
poetry shellpython3 build.pyVous devriez obtenir ce fichier README.md :
# Hey! Nice to see you
Welcome to my page!I'm my_name, a geek from **Lille, France**....
**My blog**: [myblog.exemple.com](https://myblog.exemple.com)Bien sûr, le contenu dépend de votre profil github. Le lien vers le blog existe que si dans votre profil, il existe.
Ajouter vos informations
Pour ajouter des informations à votre profil, il faut ajouter des champs au dictionnaire contexte. Par exemple je vais vous montrer comment ajouter la météo actuelle. Pour cela je fais appel au site wttr.in ↗ avec le paramètre
curl https://wttr.in/Tourcoing, France: ☀️ +23°CCe qui se traduit en python en utilisant la librairie requests :
from profile_readme import get_github_context, ProfileGeneratorimport requests
def get_weather(city): # declare the client. format defaults to the metric system (celcius, km/h, etc.) url = 'https://wttr.in/{}?format=3'.format(city) res = requests.get(url) return res.text
if __name__ == "__main__": weather = get_weather("Lille") context = { "weather" : weather, } context.update(**get_github_context("votre_profil")) ProfileGenerator.render( template_path="README-TEMPLATE.j2", output_path="README.md", context=context, )On update la variable contexte avec la fonction du même nom. Ensuite dans le fichier template on ajoute ces lignes :
## Weather
{{ weather }}On relance la génération et on obtient :
# Hey! Nice to see you
Welcome to my page!I'm my_name, a geek from **Lille, France**....
**My blog**: [myblog.exemple.com](https://myblog.exemple.com)
Tourcoing, France: ☀️ +23°CVous avez compris le principe ? Si oui il vous reste plus qu’à … Mais non, allez dans mon profil ↗ et copiez les quelques fonctions que j’ai écrites :
- ajouter de bagdes du projet shields.io ↗
- ajouts de liens
- ajoutes des 3 derniers billets de mon blog
- …