4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Slackのカスタム絵文字の数を数える(ElixirとRubyを使って)

Last updated at Posted at 2020-02-21

はじめに

カスタム絵文字数

  • 1,667個ありました

カウント方法

  • SlackのAPI emoji.listを使います
  • tokenが必要になります
    • トークンの取得方法は、Slack API 推奨Tokenについて の記事が詳しいです
    • ありがとうございます :bow:
    • 必要なスコープは、emoji:readが必要になります
  • 以下、RubyElixirを使って書いてみます

Ruby

slack_emoji_list_count.rb
require 'open-uri'
require 'json'

TOKEN = "xoxp-...secret..."

body = URI.open("https://slack.com/api/emoji.list?token=#{TOKEN}", &:read)
puts JSON.parse(body)["emoji"].reject { |k, v| v.start_with?('alias:') }.size()

実行結果

% ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin19]
% ruby slack_emoji_list_count.rb
1667

Elixir

lib/sandbox/slack_emoji_list.ex
defmodule Sandbox.SlackEmojiList do
  @token "xoxp-...secret..."

  def run do
    url()
    |> HTTPoison.get!()
    |> Map.get(:body)
    |> Jason.decode!()
    |> Map.get("emoji")
    |> Enum.reject(fn {_key, value} -> String.starts_with?(value, "alias:") end)
    |> Enum.count()
    |> IO.puts()
  end

  defp url do
    "https://slack.com/api/emoji.list?token=#{@token}"
  end
end

以下、Elixirの環境が整っていない方向けに説明をします。

1. インストール

  • Installing Elixir
  • macOSの方は、asdf-vmがオススメです
    • とりあえず試したい場合にはHomebrewを使って、brew install elixirでのインストールでもよいとおもいます

2. プロジェクト作成

% mix new sandbox
% cd sandbox

3. 依存ライブラリを追加

  • HTTPクライアントのHTTPoison
  • _A blazing fast JSON parser and generator in pure Elixir_のJasonをmix.exsに追加します
    • (意訳) 純なElixirで書かれた爆速でHot! Hot!なJSON パーサー、ジェネレーター
mix.exs
  defp deps do
    [
      {:httpoison, "~> 1.6"},
      {:jason, "~> 1.1"}
    ]
  end
  • 依存ライブラリのダウンロード
% mix deps.get

4. ソースコードを追加

  • lib/sandbox/slack_emoji_list.ex (前述)を作る

5. 実行

% iex -S mix
Erlang/OTP 22 [erts-10.5.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Interactive Elixir (1.10.0) - press Ctrl+C to exit (type h() ENTER for help)
iex> Sandbox.SlackEmojiList.run
1667
:ok

ありがとうございます:rocket:

おまけ

  • 同僚に、https://${workspace}.slack.com/customize/emoji にアクセスしたときに表示される画面に数がてているとおしえてもらいました
    2c471a8a-02a9-431a-8c44-eb05f56bfa92.png

  • ただ上の結果と1個ずれています

  • 少し調査したところ、画像URLの先頭からの文字列が2種類あることがわかりました

%{"https://a.slack-edge.com/" => 1, "https://emoji.slack-edge.com/" => 1666}
  • "https://a.slack-edge.com/" で始まるほうが無効なカスタム絵文字になっているのかなとおもいましたが、ふつうに使えていました
  • これが使えなければ、ああ、これがだめなやつでカウントされていないのだなと納得したわけですが、そうではありませんでしたので謎だけが残りました
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?