Допустим, мы хотим найти каждый emoji, как это опубликовано в Reddit. Во-первых, мы определим, что такое эмодзи. Консорциум Unicode поддерживает их списки данных доступный. Мы принесем их через файл JSON. Файл имеет описания и другие вещи, которые нам не нужно, поэтому мы немного очистим данные и храним ее в эффективном Набор
. Если мы проверяем, является ли персонаж или не Emoji более 5к раз в секунду, нам понадобится O (1)
Время поиска!
import json with open('emojis/emoji.json', encoding='utf8') as emoji_db: cleaned = filter(lambda e: 'emoji' in e, json.load(emoji_db)) emojis = set(map(lambda e: e['emoji'], cleaned))
Чтобы проверить каждый комментарий Reddit, так как это происходит, мы будем использовать Осторожность (Обертка API Python Reddit). Это стандарт Defacto для взаимодействия с API Reddit. Это хорошо задокументировано и просто использовать.
import praw client_id = os.environ['CLIENTID'] client_secret = os.environ['CLIENTSECRET'] reddit = praw.Reddit(client_id=client_id, client_secret=client_secret, user_agent='emoji-tracker v0.1') while True: try: for comment in reddit.subreddit('all').stream.comments(): for char in comment.body: if char in emojis: print(char, flush=True) except Exception as e: print(e, file=sys.stderr)
Здесь мы настроили PAW с нашим идентификатором и секретом приложения Reddit. Как только у нас есть экземпляр Reddit, мы можем начать сканирование. PRAW получит все комментарии при управлении лимитами API для нас. Около 300 тысяч персонажей в минуту, для человека достаточно много данных, чтобы понять Но это арахис для ПК до тех пор, пока он правильно установлен.
Давайте трубы будем emojis мы узнаем на stdout
Обязательно промыть каждый Распечатать
Итак, мы не оставляем повешение. Эмаджи иногда приходят медленно, и по одному за раз – мы хотим убедиться, что наш интерфейс обновляется как можно скорее, чтобы уделить внимание пользователя на несколько дольше (для тех пользователей, которые любят смотреть строку эмохис, расти и расти и растут ).
Кстати, который из вас публикует 40 крабов за раз и почему!?
🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀.
Мы поймаем эти эмохисы в Node.js. Express/Express-WS был выбран таким образом, чтобы мы могли просто разместить наши статические файлы, одновременно создавая emoji Stream Avaliable над WebSocket. emoji-piper.py
Файл будет призван как детский процесс. Давайте прикрепим некоторые слушатели событий, чтобы поймать emojis, поскольку они отправляются на stdout.
.
/* Whenever new emojis are ready, clear up CLOSING/CLOSED connections while sending emojis to the remaining clients */ const emojiStreamer = process; emojiStreamer.stdout.on('data', (emoji) => { emoji = `${emoji}`; Array.from(clients, client => { if (client.readyState > 1) { clients.delete(client); return } client.send(emoji); }); });
Мы преобразуем данные в Строка
Очистите закрытые или закрывающие соединения и разогнали эмохис с горячей прессми. Если Emojis были целесообразными чаще, скажите в десять раз чаще, тогда имело бы смысл разместить их в группы, прежде чем передавать их (в Node.js или Python, где бы ни было ближайшее узкое место).
Находясь на передней части, мы позволяем пользователю знать, когда они будут связаны и отпустить свежие эмохисы. Причина, по которой мы Сплит ('\ N')
Вот чтобы исправить некоторые проблемы несингинга с stdout
Трубопровод – недостаток в нашем дизайне, но необходимо для быстрой прототипирования.
ws.onopen = () => { status.innerHTML = 'Connected ✔️'; } ws.onmessage = (emojis) => { // Multiple emoji may arrive delimited by a new-line char emojiList = emojis.data.split('\n'); emojiList.splice(emojiList.length - 1); emojiList.forEach(emoji => { render(emoji); }); }
Вы знали, что нет консенсуса на то, что есть множественное число emoji? Дайте мне знать на @healecodes Если вы витали на моем использовании emojis!
Этот проект открыт на Emoji Streamer С Travis CI подсчитывая эмоджис и убедившись наши тесты Pass 👍
Присоединяйтесь 150+ человек, подписанные на мой рассылка О программировании и личном росте!
Я Tweet о Tech @healecodes Отказ
Оригинал: “https://dev.to/healeycodes/-real-time-streaming-of-every-emoji-posted-as-a-comment-to-redditcom–3b94”