Générer votre profil github dynamiquement en python
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.py
Vous 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°C
Ce 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°C
Vous 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
- …