Кросспостинг из Twitter в ВКонтакте с помощью роутера / Хабр
Здравствуйте, меня зовут Евгений, и яС другой стороны, бóльшая часть моя знакомых использует ВКонтакте, да и мне, честно говоря, нравится слушать там музыку и читать новости. Очевидно, что писать самому в две разных соцсети неудобно, нужно это автоматизировать — использовать кросспостинг (перенос постов).
Далее небольшое описание моего не совсем обычного способа кросспостинга.
Еще немного предыстории
Ранее для переноса записей я использовал IFTTT. Это было не слишком удобно — посты переносились раз в 15 минут, спецсимволы энкодились (» превращалось в "), ссылки переносились сокращенными (t. co) — Вконтакте ругался при попытке перейти по этим ссылкам. Однако из-за недавних изменений в Twitter API, IFTTT был вынужден отключить «рецепты», которые читают твиты. Мне пришлось искать новый путь. Внезапно™ я узнал, что у Вконтакта есть официальный способ импортировать твиты, но для этого приходится использовать хэштег #vk. После пары дней тестирования, оказалось что работает это не всегда (видимо опять срабатывали новые ограничения Twitter API на количество запросов), плюс оставалась проблема с ссылками.Но вот недавно, ползая по интернету в поисках новой версии прошивки для своего роутера, меня осенило, что на базе моего Zyxel Keenetic можно сделать небольшой веб-сервер! Еще перед покупкой я читал о таких возможностях роутера, но потом это как-то вылетело из моей головы. И вот я приступил к реализации задуманного проекта — кросспостинга из Twitter в Вконтакте с помощью роутера.
Москва не сразу строилась
Для начала немного расскажу о возможностях Zyxel Keenetic. Вкратце, на роутер можно быстро, легко и безопасно устанавливать различные готовые модули (php, lighttpd, dlna, transmission, perl, python и др). Полее подробно можно почитать на форуме.Перед началом проекта я сформировал список хотелок. Скрипт должен был уметь:
- переносить твиты сразу после их появления либо при запуске скрипта через cron
- не переносить ответы, ретвиты и упоминания
- разворачивать сокращенные ссылки t.co в тексте твита
- по возможности копировать приложенные картинки (например, Instagram)
Затем я приступил непосредственно к документации и примерам по Twitter API. Как вы знаете, есть два типа — Streaming и REST. В последних изменениях в API явно проглядывается желание Twitter’а перевести разработчиков на Streaming API. Поэтому было решено использовать именно Streaming, чтобы не иметь проблем в будущем.
Так как я делал скрипт только для себя, то я не стал делать получение access token, а взял его сразу со страницы настроек моего Twitter-приложения. За пару часов с помощью perl-модуля было написано простенькое консольное приложение, выводившие твиты. На моем компьютере все работало отлично. Для проверки на роутере установил все нужные пакеты (как мне казалось), запустил скрипт, и… ничего. Не работает. Я установил все имеющиеся пакеты для Perl, не помогло. Путем гугления по тексту ошибки выяснил, что скорее всего, проблема из-за отсутствия какого-то perl-модуля, в результате скрипт не может правильно работать с SSL.
В итоге было решено оставить Perl, и попробовать Python.Perl умер, да здравствует Python
Скачал PyCharm, стал изучать синтаксис. Если честно, после .NET был в шоке от использования отступов в качестве обозначения блоков:) Разобрался в синтаксисе, нашел модуль tweepy, и довольно быстро мой скрипт вывода твитов был переписан на Python. Устанавливаю пакеты python на роутер, запускаю скрипт — о, чудо! Работает! Осталось дописать побочный функционал и запись постов в Вконтакте.Разворачивание ссылки. Если твит содержит ссылку, то Twitter возвращает нам JSON, в котором есть элемент
"entities"
, содержащий "urls"
. Выглядит это примерно так:"entities": { "hashtags":[], "user_mentions":[], "urls":[{ "indices":[0,21], "display_url":"dev.twitter.com/terms/display-\u2026", "url":"https://t.co/Ed4omjYs", "expanded_url":"https://dev.twitter.com/terms/display-guidelines" }] }В тексте твита содержится
"url"
, поэтому для разворачивания ссылки нужно просто в тексте заменить значение "url"
на значение "expanded_url"
. Получение изображения. Если к твиту приложена картинка, то в
"entities"
добавится элемент "media"
, вот так:"entities": { "hashtags":[], "user_mentions":[], "urls":[], "media":[{ "type":"photo", "media_url":"http://p.twimg.com/A7kqLpACEAAUlwz.png", "indices":[0,20], "sizes": { "large":{"resize":"fit","h":454,"w":584}, "small":{"resize":"fit","h":264,"w":340}, "thumb":{"resize":"crop","h":150,"w":150}, "medium":{"resize":"fit","h":454,"w":584} }, "display_url":"pic.twitter.com/XzDoEpH9", "media_url_https":"https://p.twimg.com/A7kqLpACEAAUlwz.png", "url":"http://t.co/XzDoEpH9", "expanded_url":"http://twitter.com/TestTwVK/status/268292032273977344/photo/1", "id":268292032278171648, "id_str":"268292032278171648" }] },Прямая ссылка на изображение содержится в элементе
"media_url"
. Мне пришлось сохранять картинку во временный файл на локальном диске, не нашел способа загрузить его в ВК напрямую с сервера твиттера.Посмотрим на получивший код для работы с Twitter.
url = "https://userstream.twitter.com/1.1/user.json" param = {"delimited":"length", "with":"user"} header = {} auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_key, access_secret) auth.apply_auth(url, "POST", header,param) logging.info('Twitter authorization successful') #запрос твитов req = urllib2.Request(url) req.add_header("Authorization", header["Authorization"]) r = urllib2.urlopen(req, urllib.urlencode(param), 90)Читаем ответы, если это твит — обрабатываем его
while True: #получаем длину твита length = "" while True: c = r.read(1) if c == "\n": break if c == "": raise Exception length += c length = length.strip() if not length.isdigit(): continue #читаем ответ указанной длины tweet = json.loads(r.read(int(length))) #если это твит - запускаем его обработку if "user" in tweet and "text" in tweet and "created_at" in tweet and "id" in tweet: handleTweet(tweet)Метод обработки твита:
#получаем текст твита text = tweet["text"] #проверяем, что это не ответ, ретвит или упоминание if not text. startswith('@') and not "@zzeneg" in text: #получаем ссылки в твите urls = tweet["entities"]["urls"] #заменяем сокращенные ссылки for url in urls: text = text.replace(url["url"], url["expanded_url"]) #если ссылка ведет на EyeEm - получаем id фото #если приложена картинка - убираем ее из текста if "media" in tweet["entities"]: photo = tweet["entities"]["media"][0] text = text.replace(photo["url"], "")
Работа с ВКонтакте
У ВК немного другой механизм авторизации, и просто так получить access token не получится.Сначала нужно создать desktop-приложение и взять его id. Затем сформировать ссылку вида
oauth.vk.com/authorize?client_id={ID}&scope=wall,photos,offline&redirect_uri=http://oauth.vk.com/blank.html&display=page&response_type=token
, где {ID} — это ID приложения. В данной ссылке так же указаны разрешения для приложения — wall для постинга на стену, photos для заливки изображения и offline для того чтобы полученный токен был вечным. Копируем данную ссылку в браузер. ВК спросит нас о предоставлении прав данному приложению, а затем перенаправит на URL, в котором будет содержаться токен.Для работы с методами VK API используется вот такая обертка. Код не мой, но я совершенно забыл откуда его взял — прошу прощения, что не указываю автора.
def vkMethod(method, data={}): url = 'https://api.vk.com/method/%s.json' % (method) data.update({'access_token': vkToken}) response = requests.post(url, data).json if 'error' in response: print 'VK API error: %s' % (response['error']['error_msg']) return responseЗдесь vkToken — полученный токен для ВК, method — имя метода из списка методов VK API, data — какие-то данные для метода.
Чтобы прикрепить картинку к посту на стене, нужно загрузить ее в альбом пользователя. Для фотографий на стене в ВК есть специальный альбом и специальные методы для работы с ним. Сначала получаем ссылку для загрузки фото, затем сохраняем картинку. В итоге получился такой метод:
def uploadPhoto(fileUrl): #получаем url для загрузки фото response = vkMethod('photos.getWallUploadServer') uploadUrl = response['response']['upload_url'] #сохраняем фото локально urllib.urlretrieve(fileUrl,'temp.jpg') #загружаем фото в ВК files = {'photo': open('temp.jpg', 'rb')} response = requests.post(uploadUrl, files = files).json #добавляем фото в альбом response = vkMethod('photos.saveWallPhoto', response) #возвращаем id фото return response['response'][0]['id']
attachments = uploadPhoto(photo["media_url"]) vkMethod('wall.post', {'message': text,'attachments':attachments})При этом, если
attachments
будет пустой строкой — то сообщение все равно появится на стене, без вложений.Работа с EyeEm
Я использую EyeEm (это аналог Instagram, но с нормальными Privacy Terms), и недавно подумал, что фото оттуда хорошо бы загружать в ВКонтакте. К счастью, у EyeEm есть очень простой и понятный API, и буквально в две строчки в скрипт можно добавить поддержку загрузки фоток из него.Метод получения ссылки на фото по ее ID
def getEyeEmPhotoUrlById(photoId): url = "https://www.eyeem.com/api/v2/photos/{0}?access_token={1}".format(photoId, eyeEmToken) response = requests.get(url).json return response['photo']['photoUrl']Теперь находим ссылку на фото в твите, получаем ее url и так же загружаем в ВК
if url["expanded_url"].startswith("http://www.eyeem.com/p/"): eyeEmId = url["expanded_url"].replace("http://www.eyeem.com/p/", "") photoUrl = getEyeEmPhotoUrlById(eyeEmId) attachments = uploadPhoto(photoUrl)
Установка скрипта на роутер
Готовый скрипт можно скачать с github. Токены в нем, естественно, изменены:) Нужно будет получить свои.Теперь настравиваем роутер для поддержки сторонних пакетов по инструкциям на вики. Приведу здесь краткую инструкция для Windows:
- Форматируем флэшку в NTFS, создаем на ней папки system/bin
- Вставляем флэшку в роутер, открываем ее в проводнике и копируем туда файл ext_init. sh
- Перемонтируем диск — через веб-интерфейс отключаем диск, перевтыкаем флэшку. Ждем пока в логах роутера появится запись «
dropbear[4017] Running in background
« - Подключаемся по SSH (root/zyxel) и выполняем finish_install.sh. Ждем окончания создания swap.
opkg list
. Устанавливаем python и необходимые модули:Затем, устанавливаем python с помощью команды:
- Основные пакеты с помощью команд
opkg install python
иopkg install python-openssl
- Модули tweepy и requests простым копированием папки в
system\usr\lib\python2.7\
. Новая версия requests у меня не заработала, попробуйте либо ветку cache, либо из архива. - Для активации cron переименовываем файл K02cron в папке system\etc\init.d в S02cron
- Настраиваем запуск скрипта в cron. В файл system\etc\crontabs\root добавляем строку
*/15 * * * * killall -9 "python" ; /media/DISK_A1/system/usr/bin/python /media/DISK_A1/system/root/TwVk. py
Теперь cron в 0/15/30/45 минут каждого часа будет убивать скрипт и запускать его заново.Это очень криво, но стандартная для cron команда для действия после перезагрузки@reboot
не заработала. Ну и плюс скрипт тоже не совсем идеален, перезапуск ему не повредит. Если кто-то сможет предложить идею получше — милости прошу. - Ну и наконец копируем скрипт в system\root\ и опять перемонтируем диск.
Заключение
Данный скрипт работает у меня уже около полугода (статья писалась ооочень долго), большинство ошибок я исправил. Мою стену в ВК стало гораздо удобнее читать из-за развернутых ссылок и прикрепленных фоток. Я доволен. Планирую создать еще пару скриптов для Twitter на основе роутера, например твиттер-бота.Надеюсь, данная статья кому-нибудь пригодится. Хотя бы чтобы начать использовать имеющийся роутер не только по его прямому предназначению:)
Я честно постарался исправить все грамматические ошибки и опечатки, но если Вы что-то заметите — пишите в личку.
Так же я еще раз напоминаю, что мои знания в Linux и Python недалеко ушли от нуля, и я с удовольствием выслушаю Ваши подсказки по улучшению скрипта.
Благодарности
- zyxmon, человек и
пароходфорум. Его вклад в сообщество Zyxel невозможно переоценить. - kethlin_mil, своей девушке, без нее я бы не разобрался с linux, cron и Perl.
Что такое хэштеги, и как ими пользоваться вконтакте и в одноклассниках, в инстаграме, фейсбуке и твиттере
Facebook instagram Twitter Вконтакте Одноклассники КомментироватьЗадать вопросНаписать пост
Хэштегом называется ключевая фраза или слово, особенность которого в том, что перед ним ставится решетка #. Еще недавно это был обычный символ, сейчас же хэштег крайне популярен и активно используется в различных публикациях социальных сетей. Благодаря этому пост становится доступным всем тем, кому интересна тема хэштега, даже в том случае, если пользователь не подписан на ваши обновления.
В данном случае, пользователь сможет просто вбить интересующий hashtag и увидит все публикации, которые отмечены подобной темой.
Такой современный способ позволяет:
- Выделят ключевые слова своей публикации
- Группировать посты по темам, циклам. Особенно это актуально для серьезных проектов, запущенных в социальных сетях.
- Быстро искать темы и фильтровать их.
- Увеличивать охват и трафик
Как поставить хэштег
Хэштег – это ничто иное, как символ решетки. Символ этот есть на любом телефоне, ПК, планшете. Выглядит он # и ставится в непосредственной близости от слова. Хештеги имеют вид ссылки, при нажатии на которую пользователь попадет на похожие публикации.
Правила написания
Важно правильно проставлять хэштеги, чтобы они были действующими и доступными для других пользователей. Для этого существует ряд правил, к которым можно отнести:
- Необходимость проставлять # в близости от слова. Между словом и символом решетки нельзя ставить пробелы.
- Символы можно набирать как на кириллице, так и на латинице, в любом случае они будет активны.
- Между хэштегами нужно ставить пробелы, разделяя их.
- В метках слова также должны быть без пробелов. Если пробел нужен, то его можно заменить на нижнее подчеркивание, к примеру, или же каждое новое слово начинать с большой буквы.
- Нельзя использовать в метках слишком большие словосочетания
- Внутри меток не должно быть посторонних символов, например, +, $, &, %, — и т.д.
- Нужно использовать и общие теги и авторские, так метку и публикацию будет гораздо проще найти.
Лучше использовать простые слова, перегруженность хэштегами раздражает. Стоит придерживаться золотого правила и использовать в фразе не более 2-3 слов.
Хэштеги в социальных сетях
В разных социальных сетях hashtag используется по своему, имеет свои особенности.
Вконтакте
Алгоритм поиска здесь работает с помощью хэштегов. С помощью них можно найти посты в конкретно взятом сообществе. Разработчики сайта пошли дальше, усовершенствовали систему поиска по меткам. Здесь hashtag используются иначе. После # нужно написать без пробелов название группы или сообщества, после этого поставить @, за ней должен следовать поисковый запрос. Но социальная сеть вконтакте пока не так активно использует хэштеги, здесь они встречаются не так часто.
Активно используются такие метки и в популярной сети Facebook. Продвижение страниц, информирование – главные задачи, которые решают hashtag в данном случае.
Твиттер
Родиной хэштегов является Твиттер, именно отсюда идет их начало и популярность. В этой сети хэштеги позволяют искать твиты, которые соответствуют запросу.
Инстаграмм
Очень популярны такие метки в сети Инстаграмм. Здесь они являются не только средством поиска, они и средство контента в заметке. Вся суть hashtag здесь – это написать больше меток, проинформировав больше человек о своем посте.
Одноклассники
Реже hashtag используются в Одноклассниках. Но здесь подобные метки работают по-иному. Вводы запрос, сразу показываются самые популярные запросы. Это похоже на Т9.
Пользование hashtag крайне простое и удобное. Вместе с тем это отличная возможность быстрее находить интересующую информацию и объединятся в группы «по интересам».
На главную
Reader Interactions
Quick Plays: как быстро получить доступ к хэштегам на вашем телефоне — девять10
Привет, я Крис, добро пожаловать в Quick Plays! Я один из тренеров по маркетингу в девяти10, и сегодня я покажу вам, как очень быстро получить доступ к хэштегам на вашем телефоне.
Если вы похожи на многих наших студентов, вам иногда трудно вспомнить, что такое ваши хэштеги, или их довольно сложно набирать, особенно потому, что вы печатаете их снова и снова. Итак, вот краткий совет о том, как поместить хэштеги в свои телефоны и сделать ярлык, когда вы печатаете, чтобы эти хэштеги заполнялись сами по себе и делали вашу жизнь намного проще.
У меня есть iPhone. Пользователи Android, я предполагаю, что где-то на вашем телефоне у вас есть такая же возможность, и эта функция может называться по-другому. Поэтому вам, возможно, придется покопаться в своем телефоне, чтобы найти его, но сейчас мы пройдемся по моему iPhone и узнаем, как это сделать.
Есть несколько способов добраться туда, куда мы направляемся. Один из способов — в настройках. Я иду в «Общие», «Клавиатура», а затем в «Замена текста». Вот где произойдет волшебство.
Есть более быстрый способ сделать это, и он находится в вашем поиске в настройках. Я буду искать замену текста, вы можете увидеть ее второй сверху. Я нажму на это, и оно появится, чтобы я мог нажать «Замена текста», и я в деле.
Сейчас я собираюсь сделать новую замену текста. В правом верхнем углу экрана есть знак плюса, на который я нажму и введу хэштег, который мы довольно часто используем здесь, в девять10. Это хэштег #nine10inc, а потом я создам ярлык. Попытайтесь создать что-то, что вы запомните, но также попытайтесь создать что-то, что вы не используете часто. Я не буду использовать термин девять10, потому что я часто печатаю его. И если бы я использовал «девять10», то этот хэштег все время пытался бы заполнить себя.
Итак, я сделаю «n10» и нажму «Сохранить». Итак, теперь вы можете видеть, что у меня есть «n10» в качестве ярлыка, который должен вызывать #nine10inc.
Сделаем еще один. Я собираюсь провести тренинг #digitalmarketingtraining, который мы часто используем в LinkedIn, а также в Facebook и Instagram. Я просто собираюсь сделать «dmt» для своего ярлыка; это не то, что я, вероятно, собираюсь печатать, особенно изо дня в день. Как только я нажму «Сохранить», я увижу #digitalmarketingtraining.
Чтобы использовать их, на какой бы платформе вы ни находились и где бы вы ни печатали, введите ярлык и выберите хэштег для его использования. На самом деле вы можете использовать эту функцию где угодно для любого типа фразы. Дополнительный бонус для пользователей Apple, это копирование на все ваши продукты Apple, такие как iPad и Mac.
Если есть какие-то советы, которые вы хотели бы увидеть, дайте нам знать, мы будем рады поделиться ими с вами!
БОЛЬШЕ БОЛЬШЕ QUICK PLAYS И ПРЕДОСТАВЬТЕ ВАШИМ СОТРУДНИКАМ РАЗБЛОКИРОВАТЬ ВАШИ СКРЫТЫЕ РЕСУРСЫ В DIGITAL MARKETING BOOTCAMP.
Наша программа предоставляет инструменты, знания и уверенность, чтобы вы могли больше заниматься маркетингом собственными силами. УЗНАТЬ БОЛЬШЕ
девять10
Мы — увлеченная, преданная своему делу команда людей, которые всю жизнь учатся, и наша миссия — помочь компаниям стать более самодостаточными в своем маркетинге.
Категории
КатегорииВыберите категориюБрендингБизнесПример из практикиСообществоТворчествоДизайнОбщийХостингСтиль жизниДизайн логотипаМаркетингНовостиНовости и событияМнениеПрофессиональное развитиеБыстрые игрыБезопасностьSEOСоциальные медиаОбучениеВеб-дизайнQUICK PLAYS
Подпишитесь на нашу электронную почту, где наша команда каждую неделю делится новым советом.
Откройте свое хранилище: разблокируйте свои варианты финансирования!
Как однажды сказали ABBA, деньги должны быть забавными в мире богатых людей. Финансы могут создавать барьеры для создания вашего бренда или роста
Сохранить себя! Используйте сочетания клавиш!
Хочу рассказать вам о том, как сочетания клавиш спасли мне жизнь! Хорошо, может быть, это немного преувеличение, но правда, сочетания клавиш
Аналогия с кухней железного повара
Давайте поговорим о логотипах и визуальной идентичности. Когда мы создаем бренды для наших клиентов, мы разбираем их, загружаем в Canva и обучаем наших клиентов
Использование тегов в Microsoft Teams
Теги позволяют быстро связаться с группой людей одновременно.
С помощью тегов вы можете классифицировать людей на основе атрибутов, таких как роль, проект, навыки, обучение или местоположение. Например, тег «Медсестра», «Менеджер» или «Дизайнер» позволит вам обращаться к группам людей в Teams без необходимости вводить каждое имя.
После добавления тега просто @упомяните его в канале. Все, кому был назначен этот тег, получат уведомление. досягаемость
Создание тегов и управление ими в Teams
Выберите Teams в левой части приложения и найдите свою команду в списке. Затем выберите Дополнительные параметры и выберите Управление тегами .
Здесь вы можете создавать теги и назначать их людям в вашей команде.
@упомяните тег в канале
В разговоре на канале просто @упомяните тег в своем сообщении и выберите тег из списка. Тег будет отображаться так же, как любое @упоминание, и люди, связанные с тегом, получат уведомление.
Использование тегов в чате
Чтобы начать чат с участниками тега, выберите Новый чат , начните вводить название тега, а затем выберите тег из списка. Все участники группы тегов будут добавлены в поле Кому:.
Управление настройками для владельцев групп
Владельцы команд могут выбирать, кому из членов их команды разрешено добавлять теги. Выберите Teams в левой части приложения и найдите свою команду в списке.
Перейдите к Дополнительные параметры , выберите Управление командой , выберите вкладку Настройки , а затем перейдите к разделу Теги . Здесь вы можете указать, могут ли члены или владельцы команд управлять тегами.
Примечание. Если вы не можете создавать теги или управлять ими, возможно, в вашей организации не включена эта функция. Чтобы получить разрешение на создание тегов или управление ими, обратитесь к владельцу группы. Дополнительные сведения об управлении тегами см. в разделе Управление тегами в Microsoft Teams — Microsoft Teams | Обучение Майкрософт.
Примечание. Теги пока недоступны в Air Gap.
Тегипозволяют быстро связаться с группой людей одновременно.
С помощью тегов вы можете классифицировать людей на основе атрибутов, таких как роль, проект, навыки, обучение или местоположение. Например, тег «Медсестра», «Менеджер» или «Дизайнер» позволит вам обращаться к группам людей в Teams без необходимости вводить каждое имя.
Коснитесь Teams в нижней части приложения и найдите свою команду в списке. Затем выберите Дополнительные параметры , и выберите Управление тегами .
После добавления тега просто @упомяните его в канале. Каждый, кому был присвоен этот тег, получит уведомление.
Другой способ использования тега — начать новый чат, а затем выбрать тег, назначенный людям, которых вы хотите охватить.
Примечание. Если вы не можете создавать теги или управлять ими, возможно, в вашей организации не включена эта функция. Чтобы получить разрешение на создание тегов или управление ими, обратитесь к владельцу группы. Дополнительные сведения об управлении тегами см. в разделе Управление тегами в Microsoft Teams — Microsoft Teams | Обучение Майкрософт.
Примечание. Теги пока недоступны в Air Gap.
Метки позволяют быстро связаться с группой людей одновременно.
С помощью тегов вы можете классифицировать людей на основе атрибутов, таких как роль, проект, навыки, обучение или местоположение.