Joomla 4. Компонент K2 и форк K2ForJ4 (18 янв 2024)

Если вас, как и меня, достало выслушивать (вычитывать) бесконечные обещания разработчика K2 опубликовать версию компонента K2 под Joomla 4 (без чего невозможно реализовать апгрейд from Joomla 3 to Joomla 4) - воспользуйтесь форком K2ForJ4. Который в данный момент установлен и без каких-либо проблем работает на этом веб-сайте.

Раскрутка твиттер-аккаунтов. Фолловинг, анфолловинг, другие инструменты

Больше
5 года 4 мес. назад - 5 года 4 мес. назад #1 от Aleksej
Минутка социальной рекламы. ;)

Увлекла идея сооружения универсального promotion-комбайна для Твиттера: некая альтернатива проекту Леонида Кофмана Твидиум, сошедшему, увы, с дистанции. Сразу подчеркну, что софтина пребывает в фазе активной разработки по ночам, или когда у конгениального разработчика есть на нее время: код рефакторится, дописывается и перманентно меняется, так что description и видеоролики, чаще всего, далеко отстают от функционала. Проект на данный момент некоммерческий, это open source в чистом своем виде. Ссылка ведет на гитхаб, откуда всегда можно без проблем клонировать актуальную версию написанного на ruby твиттер-инструментария, рабочее название Twitter Toolkit onRails. Повторюсь для любителей MS Windows: никаких shareware, урезанных по функционалу версий, также вшитой хрени по типу "дайте денег на кофе аффтору, вынужденному с похмелья пить зеленый чай" в природе нет и не предвидится; качать для того, чтобы выложить на torrent-трекерах смысла также ни малейшего.

Примечание. Материал Twitter-инструментарий на Ruby on Rails содержит видео, иллюстрирующее работу приложения, видео уже очень неновое; - добавил, со времени его создания, в частности, эффектные flash-мессаджи на бутстрапе и ряд функций, возвращающих аяксом результат вызова. О чем далее.

По функционалу:

1,2. На момент публикации этого материала Twitter Toolkit onRails поддерживает взаимный фолловинг в двух режимах: полностью автоматический (небыстрый, т.к. API Twitter что есть силы тормозит такого рода действия, особенно для раскрученных старых аккаунтов, насчитывающих десятки тысяч последователей/читателей), и полуавтоматический режим: после запуска и обработки данных API для вашего твиттер-аккаунта программа формирует ряд ссылок на твиттерян, читающих вас, но не читаемых вами; вам только что и надо - кликнуть по ссылке и далее нажать кнопку "читать". По умолчанию выводится двадцать линков, что крайне несложно увеличить в скриптах приложения; правда, автор очень не рекомендует этим увлекаться, т.к. отрицательная реакция Твиттера, во всю дурь борющегося сегодня с массфолловингом и заодно с пресловутыми русскими хакерами/троллями, уж поверьте, не заставит себя ждать. For example, на скрине пример фолловинга в автоматическом режиме на одном из моих аккаунтов, насчитывающим полтора десятка тысяч читателей; вы видите, что программа вынуждена пережидать каждые 15 минут, чтобы ответно "зафолловить" очередных нескольких френдов, и затем снова уходит в rescue... и это еще довольно быстро. Впрочем, с молодыми аккаунтами все вроде бы немного проще.





Далее, по функциям:

3. Разумеется, анфолловинг (отписаться от тех, кто не читает вас) в полностью автоматическом режиме: в этом плане никаких ограничений Твиттер не определяет, анфолловьте хоть тысячу акков за раз:





4. Ретвит-бот. Крайне полезная фича: задаем в настройках приложения тег - один или несколько, разделенные запятыми - и запускаем работу программы всего одним нажатием кнопки (пользовательский интерфейс приложения на данный момент крайне незамысловат, хотя и построен на bootstrap и ajax-e; планирую для пущего эффекта добавить стили в ближайшем будущем): в течение пятнадцати-двадцати минут (количество ретвитов и, соответственно, время работы бота, опять же, очень несложно увеличить, причем его величество Твиттер на этот раз окажется несколько более благосклонен к вам, чем при разнообразных попытках активного масфолловинга) ваш аккаунт полностью "на автомате" будет искать и ретвитить твиты по заданным тегам. Что, исходя из опыта, активно стимулирует интерес к вашему твиттер-аккаунту потенциальных его читателей, коих сразу следует резкий приток. После окончания работы нелишне проглядеть ретвиты на предмет "наличия отсутствия" возможности возбуждения против владельца твиттер-аккаунта уголовного дела в контексте закоренелого его экстремизьма; хотя это и маловероятно, Твиттер ведь не ВКонтакте... но мало ли, что там боту из твитов попадется. Да и простая вежливость по отношению к твиттерянам велит хотя бы краем глаза пробежать, что же именно ваш аккаунт от вашего имени ретвитит. Работа ретвит-бота проиллюстрирована, в частности, коротким видеоскринкастом (см. линк в начале статьи); к слову, моего коллегу неслабо позабавил использованный при этом (сугубо в демонстрационных целях!) тег.

5,6. Программа позволяет "спарсить" как ники (screen_name) читателей, так и последние твиты абсолютно любого, по вашему выбору, твиттер-аккаунта. Причем вывод аяксом идет как на веб-страничку приложения, так и - одновременно - в csv-файл.

7. Автопостинг (отложенный постинг). Опция позволяет, введя в текстовое поле ряд произвольных твитов (любое их количество - 10, 20, 100, сколько хотите) - занять свой аккаунт работой в течение любого временного отрезка. Через рандомные (разные, случайные) промежутки времени ваш аккаунт будет "на автомате" выстреливать в эфир Твиттера ваши сообщения. Это также весьма удобно, особенно в сочетании с функцией парсинга: например, выкачал из CNN актуальный новостной ряд, либо с anekdotru ряд приколов, и тут же скопипастил полученное - в текстовое поле функции отложенного постинга, теперь жмем "начать" - и готово, поехали. Также весьма стимулирует подписчиков, которых затем фолловим, используя один из двух вариантов ранее описанной функции following.

Важные примечания:

Twitter Toolkit onRails реализован полностью в рамках API Twitter, являясь, по сути, его клиентской частью. Иных способов работы прога элементарно не предусматривает; таким образом, инструментарий не содержит ничего, противоречащего правилам Твиттера.

Алгоритмы программы использует в работе токены доступа: consumer_key, consumer_secret, access_token, access_token_secret. Любой твиттерянин имеет право испросить эти данные в разделе "для девелоперов" своего аккаунта; все заявки проходят ручную модерацию, если правильно сформулируете запрос - в течение двух недель вы получите у Твиттера полностью бесплатный доступ к святая святых: к API Твиттера.

Работа с программой и все вышеописанные функции не требует, таким образом, ввода пароля к вашему твиттер-аккаунту, также совершенно без надобности его, аккаунта, название. В этом ряд преимуществ для особо недоверчивых: если предположить невозможное, что прога передает коварному автору/хакеру какие-то сведения - использовать полученную информацию он, при всем его врожденном коварстве, навряд ли сумеет. Упоминаю об этом только шутки ради: весь программный код приложения полностью на GitHub открыт и прозрачен, никаких злонамеренных вставок, таким образом, иметь не может.

И последнее, опять-таки для любителей проприетарной системы Windows. Описываемая программа никоим образом не является виндоус-приложением! Изначально задумывалась она как веб-приложение, вполне возможно, к этому и вернется со временем... на данный момент ничто не мешает Twitter Toolkit onRails работать на вашем домашнем компьютере, под Windows, Mac или Linux, в качестве ruby on rails приложения.
Последнее редактирование: 5 года 4 мес. назад пользователем Aleksej.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Dev banner 2
Больше
5 года 4 мес. назад - 5 года 4 мес. назад #2 от Aleksej
Продолжаем.

До сей поры занимался в основном логикой работы Twitter Toolkit, причесать интерфейс только еще собираюсь. На случай, если кто-то захочет потестить, опишу ряд моментов, во избежание недопонимания. И заодно объясню технические названия функций выпадающего списка.

Создав впервые аккаунт в проге (все сугубо локально, никаких внешних привязок, регтесь хоть под Биллом Гейтсом) и залогинившись - необходимо создать как минимум один (или любое количество) аккаунт доступа уже к тви-аккаунту, содержащий ключи/токены, полученные в разделе "для девелоперов" Твиттера. После этого выбираем в gropdown-списке аккаунт, с которым работаем (многопоточная работа на данный момент не поддерживается, это потребовало бы прокси-серверов, оставим "на потом") и соответствующий экшен во втором dropdown-списке.

1,2. follow, unfollow - думаю, понятно без комментариев: работа приложения полностью в автоматическом режиме. Если twi-аккаунт у вас раскрученный и насчитывает немалое количество последователей - все пойдет значительно медленнее, чем на скринкасте (ссылка в начале топика); прежде всего - на этапе, показанном далее, прога, как вам вполне может показаться, замрет на несколько минут:





На самом деле все это время программа деятельно работает, вытаскивая небольшими порциями посредством API Twitter фолловеров аккаунта; затем, на этапе добавления в массив, вы увидите это в консоли: "adding follower to an array:блаблабла". Затем снова пауза: вытаскиваем френдов, и снова концовку этапа можно наблюдать в консоли. Далее прога сравнит два массива и создаст на их основе третий: перечень аккаунтов, которые необходимо фолловить/анфолловить. На скринкасте мелькают идентификаторы аккаунтов, но актуальная версия софтины показывает уже ники (screen_name, как на скриншоте далее), для наглядности.

Остановка процесса интерфейсом не предусмотрена: намереваюсь реализовать это на уровне менеджера очередей, так будет правильнее. Если Twitter Toolkit сразу после начала фолловинга в автоматическом режиме получает от Твиттера отлуп (и вынужден сразу уйти в rescue, такое бывает, и нередко, особенно если ранее переборщить с фолловингом) - процесс тут же завершается, так как работать далее в этот раз уже нет смысла. Если же Твиттер позволяет работать - фолловинг идет до тех пор, пока это возможно и пока не придет отлуп; два раза подряд полученное от Твиттера предупреждение о превышении лимита означают остановку работы приложения, при этом кнопка запуска вновь станет активной:





Если необходимо почему-либо аварийно завершить работу приложения, в линуксе это возможно сделать вот так:

Code:
alex@linux-1fj7:~> lsof -wni tcp:3000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby.ruby 5139 alex 11u IPv4 113705 0t0 TCP 127.0.0.1:hbci (LISTEN) alex@linux-1fj7:~> kill -9 5139


и на винде что-нибудь аналогичное.

3. follow-hands Фолловинг в полуавтоматическом режиме. Начало аналогично вышеописанному, используются те же самые методы класса, но затем на страничку будут выведены 20 линков (target="_blank") для ручного взаимного фолловинга:





4. acc-parsering Парсинг читателей любого тви-аккаунта (указывать можно без собачки). Выводится как на страничку, так и в csv файл в корне приложения. Несложно было бы, конечно, используя те же самые рабочие функции приложения - реализовать фолловинг по полученному таким образом массиву. Но не уверен, что это нужно, с учетом лимитов и прочих нововведений Твиттера; впрочем, посмотрим.

5,6. parsering Указываем в текстовом поле название любого аккаунта и парсим из него последние твиты; на страничку и одновременно в csv. На страничку они уже выводятся в том виде, чтоб было можно сразу скопипастить и вставить (Ctrl+A, Ctrl+C, Ctrl+V) в тот же самый textarea, выбрав при этом из списка опцию posting:





7. retweeting Ну, тоже понятно. Через запятую пишем в текстовом поле теги, предваряя каждый решеткой. И вперед:





Вот как-то так пока что.
Последнее редактирование: 5 года 4 мес. назад пользователем Aleksej.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
5 года 3 мес. назад #3 от Aleksej
Новогоднее обновление Twitter Toolkit onRails.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
5 года 1 мес. назад - 5 года 1 мес. назад #4 от Aleksej
Почерпнуто на SO.
Как оптимально избавиться от case в контроллере? Garrett Motzner, пожалуй, предлагает один из самых элегантных вариантов:

This is fairly readable, and works for most cases.
However, if you want to move this logic out of the controller entirely, you could do so with a routing constraint :

Code:
# you can create a constraint object to perform the match ParamMatchContraint = Struct.new(:parameter, :expected_value) do def matches?(request) request.params[parameter] == expected_value end end Rails.application.routes.draw do resources :targets do root constraints: lambda {|request| pp(request).params[:select_action] == 'one'}, action: :one # a lambda will work as well as a constraint class root constraints: ParamMatchContraint.new(:select_ation, 'two'), action: :two end ... end


Note though that this is an "opt in" constraint, and anything that doesn't match will fall through to the index action.

This is also a fairly novel thing to do, so newbies to the project could easily get tripped up by this. However, it very well could be the best way to accomplish your task. What you get from this method is that filters using only and except can specify your custom actions, and you can use the default conventions for specifying views based on action name with out having to manually specify a view file.


Есть ли смысл воспользоваться этим решением применительно к моему контроллеру? Хм, нужно подумать...
Последнее редактирование: 5 года 1 мес. назад пользователем Aleksej.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
5 года 1 мес. назад #5 от Aleksej
Продолжаем размышлять дальше.

Как сделать работу приложения многопоточной? иными словами, чтобы выбранный экшн выполнялся одновременно в двух и более (про прокси - это чуть позже) Твиттер-аккаунтах?
Можно было бы элементарно сделать вот так, добавив в select вьюхи multiple: передаем аяксом не одно, а несколько названий групп токенов доступа, подхватываем в контроллере из params, пробегаем итератором и тут же запускаем тред:

Code:
module Main extend ActiveSupport::Concern def index if params[:select].present? params[:select].each do |item| Thread.new { tweet = current_user.tweet.detect { |t| item == t.name } config = { # etc

Но, увы, самое простое решение не всегда самое оптимальное... впрочем, почему б не попробовать.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
2 года 8 мес. назад - 2 года 8 мес. назад #6 от Aleksej
В итоге сделано на основе Active Job. Как и следовало, ожидать, разумеется. Test please.







Последнее редактирование: 2 года 8 мес. назад пользователем Aleksej.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
2 года 8 мес. назад #7 от Вебмастер
Тестировал. Насередке автопостинга твитов выскочила ошибка:

[ActiveJob] [PostingJob] [e4a4e70f-aa08-4ae1-986f-1064f10c6b56] Error performing PostingJob (Job ID: e4a4e70f-aa08-4ae1-986f-1064f10c6b56) from Async(default) in 156362.06ms: Twitter::Error::Unauthorized (Could not authenticate you.)

Ни с того ни с сего. 

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
2 года 8 мес. назад #8 от Aleksej
Вебмастер, вероятнее всего, работали вы с двумя или более аккаунтами одновременно и все они были без прокси. Похоже на отлуп Твиттера, к приложению это не имеет отношения.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
2 года 8 мес. назад #9 от Aleksej
Добавлена возможность лайкать твиты, находя их по ключевым словам / тэгам аналогично тому, как это реализовано в функционале ретвитов.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
2 года 8 мес. назад #10 от Aleksej
Добавлена новая опция "фолловинг по списку". Во время обычного ответного фолловинга перечень аккаунтов, которые нужно зафолловить, сохраняются теперь вдобавок еще и в обычный csv-файл, причем по мере работы приложения зафолловленные акки удаляются. Соответственно, можно в любое время вернуться к фолловингу по этому списку, не тратя время на новое его формирование. Удобно тем, у кого медленный интернет, да и остальным, вероятно, тоже; взаимодействие с Twitter API сейчас идет небыстро, и я пока что не понимаю, что именно тому причиной: особенности провайдера интернета, всем опостылевшие потуги РосКомПозора или же, может быть, уже и усилия инженеров Твиттера.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Работает на Kunena форум