Zenn Tech BlogPublication Pro🦄URLで絵文字を指定したらTwemoji画像を返す仕組みを作った(Cloud Functions)catnose2022/03/23に公開3件Cloud FunctionsemojiTwemojitechZenn Tech BlogPublication Proクラスメソッド株式会社 Zennチームのテックブログです。Zennの開発・運用にまつわる技術的な知見を投稿します。主な技術スタックは React / Next.js / TypeScript / Ruby on Rails / Google Cloud などです。Discussionrithmety2022/03/24twemoji.maxcdn.com の URI を見た感じでは下記の実装でも問題なさそうですね const emojiToImgUrl = (emoji: string): string => `https://twemoji.maxcdn.com/2/svg/${ emoji.match(/./giu).map(t => t.codePointAt(0).toString(16)).join('-') }.svg` emojiToImgUrl('👨👩👧👦') // 'https://twemoji.maxcdn.com/2/svg/1f468-200d-1f469-200d-1f467-200d-1f466.svg' catnose2022/03/24に更新ありがとうございます。仰る通りだと思います!自分も最初は [...emoji].map((x) => x.codePointAt(0).toString(16)).join('-'); という感じで書いていたのですが、 絵文字が2つ渡された場合に1つ目の絵文字URLを返してくれる 前後に絵文字以外のテキストが入り込んでしまった場合にも絵文字のURLを取り出せる という理由からtwemoji-parserを使うことにしました。 関連 https://zenn.dev/catnose99/scraps/79012f2617ffd9 twemoji-parserの該当部分のソースコード: https://github.com/twitter/twemoji-parser/blob/master/src/index.js rithmety2022/03/25なるほどです 絵文字が2つ渡された場合に関しては Intl.Segmenter という選択肢もありますが 前後に絵文字以外が入る可能性については確かに正規表現しか無い気がしますね… const seg = new Intl.Segmenter('ja', { granularity: 'grapheme' }) Array.from(seg.segment('🐱😗')) // [{"segment":"🐱","index":0,"input":"🐱😗"},{"segment":"😗","index":2,"input":"🐱😗"}] Unicode はつらい… 返信を追加
rithmety2022/03/24twemoji.maxcdn.com の URI を見た感じでは下記の実装でも問題なさそうですね const emojiToImgUrl = (emoji: string): string => `https://twemoji.maxcdn.com/2/svg/${ emoji.match(/./giu).map(t => t.codePointAt(0).toString(16)).join('-') }.svg` emojiToImgUrl('👨👩👧👦') // 'https://twemoji.maxcdn.com/2/svg/1f468-200d-1f469-200d-1f467-200d-1f466.svg' catnose2022/03/24に更新ありがとうございます。仰る通りだと思います!自分も最初は [...emoji].map((x) => x.codePointAt(0).toString(16)).join('-'); という感じで書いていたのですが、 絵文字が2つ渡された場合に1つ目の絵文字URLを返してくれる 前後に絵文字以外のテキストが入り込んでしまった場合にも絵文字のURLを取り出せる という理由からtwemoji-parserを使うことにしました。 関連 https://zenn.dev/catnose99/scraps/79012f2617ffd9 twemoji-parserの該当部分のソースコード: https://github.com/twitter/twemoji-parser/blob/master/src/index.js rithmety2022/03/25なるほどです 絵文字が2つ渡された場合に関しては Intl.Segmenter という選択肢もありますが 前後に絵文字以外が入る可能性については確かに正規表現しか無い気がしますね… const seg = new Intl.Segmenter('ja', { granularity: 'grapheme' }) Array.from(seg.segment('🐱😗')) // [{"segment":"🐱","index":0,"input":"🐱😗"},{"segment":"😗","index":2,"input":"🐱😗"}] Unicode はつらい… 返信を追加
catnose2022/03/24に更新ありがとうございます。仰る通りだと思います!自分も最初は [...emoji].map((x) => x.codePointAt(0).toString(16)).join('-'); という感じで書いていたのですが、 絵文字が2つ渡された場合に1つ目の絵文字URLを返してくれる 前後に絵文字以外のテキストが入り込んでしまった場合にも絵文字のURLを取り出せる という理由からtwemoji-parserを使うことにしました。 関連 https://zenn.dev/catnose99/scraps/79012f2617ffd9 twemoji-parserの該当部分のソースコード: https://github.com/twitter/twemoji-parser/blob/master/src/index.js
rithmety2022/03/25なるほどです 絵文字が2つ渡された場合に関しては Intl.Segmenter という選択肢もありますが 前後に絵文字以外が入る可能性については確かに正規表現しか無い気がしますね… const seg = new Intl.Segmenter('ja', { granularity: 'grapheme' }) Array.from(seg.segment('🐱😗')) // [{"segment":"🐱","index":0,"input":"🐱😗"},{"segment":"😗","index":2,"input":"🐱😗"}] Unicode はつらい…
Discussion
twemoji.maxcdn.com の URI を見た感じでは下記の実装でも問題なさそうですね
ありがとうございます。仰る通りだと思います!自分も最初は
という感じで書いていたのですが、
という理由からtwemoji-parserを使うことにしました。
関連
twemoji-parserの該当部分のソースコード: https://github.com/twitter/twemoji-parser/blob/master/src/index.js
なるほどです
絵文字が2つ渡された場合に関しては Intl.Segmenter という選択肢もありますが
前後に絵文字以外が入る可能性については確かに正規表現しか無い気がしますね…
Unicode はつらい…