[Automatisation Python] Créer des pictogrammes d'icônes utilisateur Slack [API Slack]

Ce que j'ai fait

J'ai écrit un script qui transforme les icônes des utilisateurs Slack en pictogrammes. ↓ Ainsi, l'icône de l'utilisateur peut être utilisée telle quelle pour la réaction. (** Il est pratique de savoir en un coup d'œil qui a réagi ?? **)

スクリーンショット 2019-11-10 12.41.48.png

Si vous souhaitez l'utiliser rapidement, veuillez consulter le référentiel. https://github.com/KoseiYoshida/slack_usericon_to_emoji

A partir de maintenant, j'expliquerai le contenu du script.

Même si vous ne regardez pas l'explication, vous pouvez voir ce que vous faites en regardant le référentiel. Cependant, comme je l'ai fait avec beaucoup d'efforts, j'ai écrit un article de commentaire sur le script qui sert également de ma propre sortie.

Lecteur supposé

Environnement de développement

Notez que le code de cet article est abrégé à des fins d'illustration. Si vous voulez voir le code qui fonctionne, veuillez consulter le référentiel.

Flux de travail

  1. Obtenez un jeton pour accéder à l'API Slack
  2. Obtenez des informations utilisateur via l'API
  3. Téléchargez les images d'icônes de tous les utilisateurs
  4. Téléchargez les images téléchargées à la fois

1. Obtenez un jeton

Ici, nous allons acquérir le jeton requis pour acquérir les informations utilisateur de Slack. Si vous avez de l'expérience dans l'acquisition de Token, vous pouvez simplement consulter l'enregistrement OAuthScope écrit en bas.

Je me suis référé à cet article pour savoir comment obtenir Token for Slack API. À propos du jeton recommandé de l'API Slack

Maintenant, obtenons le jeton.

Il existe deux types d'API Slack, le jeton recommandé et le jeton hérité. Dans cet article, nous allons procéder avec le jeton recommandé. Pour ceux qui ont des problèmes, un jeton hérité facile à obtenir convient parfaitement.

Pour la méthode de base, voir "Comment obtenir un jeton avec l'interface graphique" dans le lien ci-dessus. Après avoir sélectionné le nom de l'application et l'espace de travail pour ajouter et créer l'application, il est temps d'ajouter Scope.

スクリーンショット 2019-11-10 13.01.30.png (Les autorisations sont vérifiées dans l'image, mais rien dans l'état initial)

Si tout se passe bien, vous devriez voir quelque chose comme celui ci-dessous. スクリーンショット 2019-11-10 13.01.21.png

Maintenant que les paramètres sont terminés, appuyez sur le bouton InstallAppToWorkspace sur l'écran Autorisation. Si vous suivez les instructions et que l'installation réussit, vous devriez voir un OAuthAcessToken!

Maintenant que le jeton a été créé, nous allons accéder aux informations utilisateur.

2. Acquisition d'informations sur les utilisateurs

Ici, je voudrais accéder aux informations utilisateur à l'aide du Token obtenu précédemment et obtenir l'URL de l'image de l'icône.

Lors de l'obtention d'informations sur l'utilisateur https://slack.com/api/users.list?token= <jeton acquis> Il semble que vous devriez faire une demande GET à. Au fait, je l'obtiens sous la forme de json et le rend facile à manipuler.

USERLIST_GETURL_BASE = 'https://slack.com/api/users.list?token='
TOKEN = <Jeton obtenu>

def get_userslist_json():
    #Spécifiez l'en-tête pour qu'il puisse être obtenu au format json
    headers = {'content-type': 'application/json'}
    res = requests.get(USERLIST_GETURL_BASE + TOKEN, headers)
    users_list = res.json()
    #Les données réelles sont'members'C'est dedans. Alors jette le reste
    users_list = users_list['members']
    return users_list

Le seul élément dont vous avez besoin dans la réponse est «membres», jetons donc les autres.

Dans la liste acquise, un élément est l'information (type dictionnaire) pour un utilisateur. ↓ Information pour un utilisateur. C'est un type de dictionnaire et divers éléments sont alignés.

{'id': 'UQ412C941',
  'team_id': 'TBASP22UV',
  'name': 'koseiasengineer',
  'deleted': False,
  'color': 'e7392d',
  'real_name': 'Pig',
  'tz': 'Asia/Tokyo',
  'tz_label': 'Japan Standard Time',
  'tz_offset': 32400,
  'profile': {'title': '',
   'phone': '',
   'skype': '',
   'real_name': 'Pig',
   'real_name_normalized': 'Pig',
   'display_name': 'Taro de porc',
   'display_name_normalized': 'Taro de porc',
   'status_text': '',
   'status_emoji': '',
   'status_expiration': 0,
   'avatar_hash': '1b04567a2fd5',
   'image_original': 'https://avatars.slack-edge.com/2019-11-09/815178912706_1b04567a2fd5434e2659_original.png',
   'is_custom_image': True,
   'first_name': 'Pig',
   'last_name': '',
   'image_24': 'https://avatars.slack-edge.com/2019-11-09/815178912706_1b04567a2fd5434e2659_24.png',
   'image_32': 'https://avatars.slack-edge.com/2019-11-09/815178912706_1b04567a2fd5434e2659_32.png',
   'image_48': 'https://avatars.slack-edge.com/2019-11-09/815178912706_1b04567a2fd5434e2659_48.png',
   'image_72': 'https://avatars.slack-edge.com/2019-11-09/815178912706_1b04567a2fd5434e2659_72.png',
   'image_192': 'https://avatars.slack-edge.com/2019-11-09/815178912706_1b04567a2fd5434e2659_192.png',
   'image_512': 'https://avatars.slack-edge.com/2019-11-09/815178912706_1b04567a2fd5434e2659_512.png',
   'image_1024': 'https://avatars.slack-edge.com/2019-11-09/815178912706_1b04567a2fd5434e2659_1024.png',
   'status_text_canonical': '',
   'team': 'TBASP22UV'},
  'is_admin': False,
  'is_owner': False,
  'is_primary_owner': False,
  'is_restricted': False,
  'is_ultra_restricted': False,
  'is_bot': False,
  'is_app_user': False,
  'updated': 1573257843,
  'has_2fa': False}

** Il semble que les images d'icônes soient placées dans 'image_original', 'image_ <résolution>'. ** ** Il semble qu'il existe différents types de noms, mais ** le nom que vous voyez habituellement en tant qu'utilisateur Slack est dans'display_name '**.

real_name

Maintenant que je sais où se trouve l'image de l'icône, je vais la télécharger.

3. Télécharger l'icône de l'utilisateur

J'ai trouvé l'emplacement de l'image de l'icône à partir des informations utilisateur obtenues via SlackPI, je vais donc la télécharger. On suppose que le nom enregistré de l'image = le nom d'Emoji.

En gros, il vous suffit d'obtenir l'image et de la sauvegarder, mais il y a un problème.

Donc, nous allons résoudre ces problèmes.

Repousser Bot et les utilisateurs qui appartenaient au passé

En regardant les informations utilisateur obtenues précédemment, des éléments tels que «is_bot» et «is_deleted» sont préparés. Utilisez ces objets pour vous repousser.


#On suppose que l'argument membre contiendra les informations d'un utilisateur (type de dictionnaire).
def is_target_member(member):

    if member['is_bot']:
        return False

    #Le SlackBot qui participe par défaut'is_bot'Est faux pour une raison quelconque, il sera donc rejeté par son nom
    if member['name'] == 'slackbot':
        return False

   if member['deleted'] == 'True':
        return False

    return True

Pour une raison quelconque, le drapeau "is_bot" de SlackBot, qui date du début lorsque Workspace est créé, est False, il est donc repoussé de force par son nom.

Romanize japonais

Il semble que le japonais (Kanji, Katakana, Hiragana) peut être converti en caractères romains avec un package appelé "pykakasi". (Référence, Installation et utilisation du module pykakasi qui convertit les caractères japonais en caractères romains) Au fait, j'ai également mis "mojimoji" qui convertit pleine largeur -> demi-largeur.

$ pip install git+https://github.com/miurahr/pykakasi
$ pip install mojimoji

Il sera romanisé comme ça.

from pykakashi import kakashi
import mojimoji

def fix_name_style(name):
        
    jpn2romaji = kakasi()
    jpn2romaji.setMode('J', 'a')
    jpn2romaji.setMode('K', 'a')
    jpn2romaji.setMode('H', 'a')
    k2r_conv = jpn2romaji.getConverter()
    fixed_name = k2r_conv.do(name)

    fixed_name = mojimoji.zen_to_han(fixed_name)

    #Les points et les espaces entraîneront des erreurs, supprimez-les
    fixed_name = fixed_name.replace(".", "")
    fixed_name = fixed_name.replace(' ', '')

    return fixed_name

Télécharger le résumé

Maintenant que le problème a été résolu, il est temps de le télécharger. J'ai écrit une fonction pour télécharger des images, et l'image entière ressemble à ceci. (↓ est le code permettant de comprendre le flux de traitement. Veuillez consulter le référentiel pour celui qui fonctionne correctement.)


def download_file(self, url, dst_path):
    with urllib.request.urlopen(url) as web_file, open(dst_path, 'wb') as local_file:
        local_file.write(web_file.read())

save_directory_name = 'temp' #N'importe quel nom va bien
members_list = get_userslist_json()

for member in members_list:
    #Repel Bot et utilisateurs désabonnés
    if not is_target_member(member):
        continue

    member_prof = member['profile']

    name = member_prof['display_name'].lower()
    name = fix_name_style(name)

    # 'image_original'Contient l'url de l'image de l'icône
    image_url = member_prof['image_original']
    _, ext = os.path.splitext(image_url)

    saved_file_path = './' + save_directory_name + os.sep + name + ext
    download_file(image_url, saved_file_path)

4. Ajouter des pictogrammes

Nous utiliserons ce "slack-emojinator" pour ajouter l'image sauvegardée sous forme de pictogramme. https://github.com/smashwilson/slack-emojinator Je pense que ce n'est pas grave si vous suivez les instructions dans README.md. (Si vous aimez l'explication en japonais, ici j'ai essayé d'utiliser l'émojinateur Slack)

D'ailleurs, l'ajout de pictogrammes par "slack-emojinator", Comme l'API Slack ne dispose pas d'API pour ajouter des pictogrammes, il semble que les sessions soient créées de force à l'aide de cookies.

"slack-emojinator" est utilisé en l'appelant depuis la ligne de commande. Si vous voulez tout faire, du téléchargement de l'image au téléchargement automatique, veuillez vous référer au référentiel suivant. https://github.com/KoseiYoshida/slack_usericon_to_emoji

Résumé

Obtenir l'icône utilisateur Slack-> Automatiser les pictogrammes en Python. Vous pouvez facilement l'exécuter en clonant le référentiel, veuillez donc l'utiliser.

Désolé pour le code sale car je suis nouveau dans Python et les API. Masakari est le bienvenu.

Recommended Posts

[Automatisation Python] Créer des pictogrammes d'icônes utilisateur Slack [API Slack]
Automatisation de l'interface utilisateur avec Python
Création de chatbot Slack Python