[Python-Automatisierung] Erstellen Sie Piktogramme für Slack-Benutzersymbole [Slack-API]

Was ich gemacht habe

Ich habe ein Skript geschrieben, das Slack-Benutzersymbole in Piktogramme verwandelt. ↓ Auf diese Weise kann das Benutzersymbol so verwendet werden, wie es für die Reaktion ist. (** Es ist bequem auf einen Blick zu wissen, wer reagiert hat ?? **)

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

Wenn Sie es schnell verwenden möchten, lesen Sie bitte das Repository. https://github.com/KoseiYoshida/slack_usericon_to_emoji

Von nun an werde ich den Inhalt des Skripts erklären.

Auch wenn Sie sich die Erklärung nicht ansehen, können Sie anhand des Repositorys sehen, was Sie tun. Da ich es jedoch mit großer Anstrengung geschafft habe, habe ich einen Kommentar zum Skript geschrieben, der auch als meine eigene Ausgabe dient.

Angenommener Leser

Entwicklungsumgebung

Bitte beachten Sie, dass der Code in diesem Artikel zur Erläuterung abgekürzt ist **. Wenn Sie den Code sehen möchten, der funktioniert, lesen Sie bitte das Repository.

Arbeitsablauf

  1. Holen Sie sich ein Token, um auf die Slack-API zuzugreifen
  2. Benutzerinformationen über die API abrufen
  3. Laden Sie Symbolbilder aller Benutzer herunter
  4. Laden Sie die heruntergeladenen Bilder sofort hoch

1. Holen Sie sich Token

Hier erhalten wir das Token, das zum Abrufen von Slack-Benutzerinformationen erforderlich ist. Wenn Sie Erfahrung mit dem Erwerb von Token haben, können Sie sich einfach die unten angegebene OAuthScope-Registrierung ansehen.

Ich habe in diesem Artikel beschrieben, wie Sie die Token for Slack-API erhalten. Informationen zum empfohlenen Slack-API-Token

Lassen Sie uns nun tatsächlich das Token erhalten.

Es gibt zwei Arten von Slack-APIs: empfohlenes Token und Legacy-Token. In diesem Artikel werden wir mit dem empfohlenen Token fortfahren. Für diejenigen, die Probleme haben, ist ein leicht zu beschaffendes Legacy-Token in Ordnung.

Die grundlegende Methode finden Sie unter "So erhalten Sie Token mit der GUI" im obigen Link. Nach Auswahl des App-Namens und des Arbeitsbereichs zum Hinzufügen und Erstellen der App ist es Zeit, Scope hinzuzufügen.

スクリーンショット 2019-11-10 13.01.30.png (Berechtigungen sind im Bild aktiviert, aber im Ausgangszustand nichts)

Wenn alles gut geht, sollten Sie so etwas wie das folgende sehen. スクリーンショット 2019-11-10 13.01.21.png

Nachdem die Einstellungen abgeschlossen sind, klicken Sie im Bildschirm Berechtigung auf die Schaltfläche InstallAppToWorkspace. Wenn Sie den Anweisungen folgen und die Installation erfolgreich ist, sollte ein OAuthAcessToken angezeigt werden!

Nachdem das Token erstellt wurde, greifen wir auf die Benutzerinformationen zu.

2. Erfassung von Benutzerinformationen

Hier möchte ich mit dem zuvor erhaltenen Token auf die Benutzerinformationen zugreifen und die URL des Symbolbildes erhalten.

Beim Abrufen von Benutzerinformationen "https://slack.com/api/users.list?token= " Es scheint, dass Sie eine GET-Anfrage an stellen sollten. Übrigens bekomme ich es in Form von Json und mache es einfach zu handhaben.

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

def get_userslist_json():
    #Geben Sie den Header an, damit er im JSON-Format abgerufen werden kann
    headers = {'content-type': 'application/json'}
    res = requests.get(USERLIST_GETURL_BASE + TOKEN, headers)
    users_list = res.json()
    #Die tatsächlichen Daten sind'members'Es ist in. Also wirf den Rest weg
    users_list = users_list['members']
    return users_list

Das einzige Element, das Sie in der Antwort benötigen, ist "Mitglieder". Lassen Sie uns also die anderen wegwerfen.

In der erfassten Liste ist ein Element Information (Wörterbuchtyp) für einen Benutzer. ↓ Informationen für einen Benutzer. Es ist ein Wörterbuchtyp und verschiedene Elemente sind in einer Reihe.

{'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': 'Schwein Taro',
   'display_name_normalized': 'Schwein Taro',
   '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}

** Es scheint, dass Symbolbilder in 'image_original', 'image_ ' platziert werden. ** . Es scheint, dass es verschiedene Arten von Namen gibt, aber ** der Name, den Sie normalerweise als Slack-Benutzer sehen, ist in'display_name '.

real_name

Jetzt, da ich weiß, wo sich das Symbolbild befindet, werde ich es herunterladen.

3. Laden Sie das Benutzersymbol herunter

Ich habe die Position des Symbolbilds anhand der über SlackPI erhaltenen Benutzerinformationen herausgefunden und werde es daher herunterladen. Es wird angenommen, dass der gespeicherte Name des Bildes = der Name von Emoji ist.

Grundsätzlich erhalten Sie nur das Bild und speichern es, aber es gibt ein Problem.

Also werden wir diese Probleme lösen.

Abwehr von Bot und Benutzern, die der Vergangenheit angehörten

Mit Blick auf die zuvor erhaltenen Benutzerinformationen werden Elemente wie "is_bot" und "is_deleted" vorbereitet. Verwenden Sie diese Gegenstände, um abzuwehren.


#Es wird angenommen, dass das Argumentelement die Informationen eines Benutzers enthält (Wörterbuchtyp).
def is_target_member(member):

    if member['is_bot']:
        return False

    #Der SlackBot, der standardmäßig teilnimmt'is_bot'Ist aus irgendeinem Grund falsch, wird es namentlich abgelehnt
    if member['name'] == 'slackbot':
        return False

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

    return True

Aus irgendeinem Grund ist die 'is_bot'-Flagge von SlackBot, die von Anfang an bei der Erstellung des Arbeitsbereichs verwendet wird, False und wird daher namentlich gewaltsam abgestoßen.

Japanisch romanisieren

Es scheint, dass Japanisch (Kanji, Katakana, Hiragana) mit einem Paket namens "pykakasi" in römische Schriftzeichen umgewandelt werden kann. (Referenz, Installation und Verwendung des Pykakasi-Moduls, das japanische Zeichen in römische Zeichen konvertiert) Übrigens habe ich auch "mojimoji" eingegeben, das volle Breite> halbe Breite konvertiert.

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

Es wird so romanisiert.

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)

    #Punkte und Leerzeichen führen zu Fehlern. Löschen Sie sie daher
    fixed_name = fixed_name.replace(".", "")
    fixed_name = fixed_name.replace(' ', '')

    return fixed_name

Zusammenfassung herunterladen

Nachdem das Problem behoben wurde, ist es Zeit, es herunterzuladen. Ich habe eine Funktion zum Herunterladen von Bildern geschrieben, und das ganze Bild sieht so aus. (↓ ist der Code, mit dem Sie den Verarbeitungsablauf erfassen können. Informationen zum ordnungsgemäßen Repository finden Sie im Repository.)


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' #Jeder Name ist in Ordnung
members_list = get_userslist_json()

for member in members_list:
    #Bot und nicht abonnierte Benutzer abwehren
    if not is_target_member(member):
        continue

    member_prof = member['profile']

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

    # 'image_original'Enthält die URL des Symbolbildes
    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. Fügen Sie Piktogramme hinzu

Wir werden diesen "Slack-Emojinator" verwenden, um das gespeicherte Bild als Piktogramm hinzuzufügen. https://github.com/smashwilson/slack-emojinator Ich denke, es ist in Ordnung, wenn Sie den Anweisungen in README.md folgen. (Wenn Ihnen die Erklärung auf Japanisch gefällt, hier Ich habe versucht, Slack Emojinator zu verwenden)

Übrigens das Hinzufügen von Piktogrammen durch "Slack-Emojinator", Da die Slack-API keine API zum Hinzufügen von Piktogrammen enthält, werden Sitzungen anscheinend mithilfe von Cookies zwangsweise erstellt.

"slack-emojinator" wird verwendet, indem es über die Befehlszeile aufgerufen wird. Wenn Sie alles vom Herunterladen von Bildern bis zum automatischen Hochladen tun möchten, lesen Sie bitte das folgende Repository. https://github.com/KoseiYoshida/slack_usericon_to_emoji

Zusammenfassung

Holen Sie sich das Slack-Benutzersymbol-> Piktogramme in Python automatisieren. Sie können es einfach ausführen, indem Sie das Repository klonen. Verwenden Sie es daher.

Entschuldigen Sie den schmutzigen Code, da ich neu in Python und APIs bin. Masakari ist willkommen.

Recommended Posts

[Python-Automatisierung] Erstellen Sie Piktogramme für Slack-Benutzersymbole [Slack-API]
UI-Automatisierung mit Python
Slack Chatbot Erstellung Python