Проверка лайков в Твиттере

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
Всем доброго времени суток!
Подскажите пожалуйста как в Твиттере проверить, что твит я уже лайкал?
 

Чешир

Client
Регистрация
27.06.2014
Сообщения
1 541
Благодарностей
904
Баллы
113
у него значек сердца меняется. А ты не сохраняешь такие твитты в стоп-лист?
 

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
у него значек сердца меняется. А ты не сохраняешь такие твитты в стоп-лист?
просто думаю может как-то можно проанализировать, что твит уже пролайкан мною без сохранения его в стоп-листе
 

vrska

Client
Регистрация
07.02.2010
Сообщения
589
Благодарностей
408
Баллы
63
Прямая ссылка на твит
Лайка нет
<div class="tweet permalink-tweet js-actionable-user js-actionable-tweet js-original-tweet retweeted has-cards with-social-proof has-content logged-in js-initial-focus focus"

Лайк есть
<div class="tweet permalink-tweet js-actionable-user js-actionable-tweet js-original-tweet retweeted has-cards with-social-proof has-content logged-in js-initial-focus focus favorited"


Твит в ленте
<div class="tweet js-stream-tweet js-actionable-tweet js-profile-popup-actionable dismissible-content original-tweet js-original-tweet tweet-has-context retweeted has-cards has-content"

<div class="tweet js-stream-tweet js-actionable-tweet js-profile-popup-actionable dismissible-content original-tweet js-original-tweet tweet-has-context retweeted has-cards has-content favorited"
 
Последнее редактирование:
  • Спасибо
Реакции: Mozgolom

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
Прямая ссылка на твит
Лайка нет
<div class="tweet permalink-tweet js-actionable-user js-actionable-tweet js-original-tweet retweeted has-cards with-social-proof has-content logged-in js-initial-focus focus"

Лайк есть
<div class="tweet permalink-tweet js-actionable-user js-actionable-tweet js-original-tweet retweeted has-cards with-social-proof has-content logged-in js-initial-focus focus favorited"


Твит в ленте
<div class="tweet js-stream-tweet js-actionable-tweet js-profile-popup-actionable dismissible-content original-tweet js-original-tweet tweet-has-context retweeted has-cards has-content"

<div class="tweet js-stream-tweet js-actionable-tweet js-profile-popup-actionable dismissible-content original-tweet js-original-tweet tweet-has-context retweeted has-cards has-content favorited"
примерно понял куда копать
 

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
а как реализовать на зенке такое действие: перейти в профиль по ссылке, открыть первый твит, скопировать ссылку этого твита... затем перейти ко второму твиту, открыть его, скопировать ссылку и т.д. до 10... как вообще переходить по твитам в твитленте профиля? какие экшены использовать?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
Всем доброго времени суток!
Подскажите пожалуйста как в Твиттере проверить, что твит я уже лайкал?
C#:
// ссылка на ретвит = ссылке твита оригинала:
instance.ActiveTab.WaitDownloading();
string Resultat = "";
string ID = "";
short height = 0;
string Inner = "";
var b = instance.ActiveTab.FindElementByXPath("//li[@data-item-type='tweet'][not(.//span[@class='js-retweet-text']) and not(.//span[@class='js-pinned-text'])][.//button]", 0);
if (!b.IsVoid)
{
    Inner = b.InnerHtml;
    ID = b.GetAttribute("data-item-id");

    var b_url = b.FindChildByXPath(".//div[@data-permalink-path]", 0);
    string Twit_Url = b_url.GetAttribute("data-permalink-path");
    Twit_Url = "https://twitter.com" + Twit_Url;
    project.Variables["Twit_Url"].Value = Twit_Url;
    
    var b2 = instance.ActiveTab.FindElementByXPath("//li[@data-item-id='" + ID + "']//button[contains(@class, 'js-actionFavorite')]", 0);
    height = short.Parse(b2.GetAttribute("height"));
    if (height>0)
        {
            //b2.Click();
            instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(b2);
        System.Threading.Thread.Sleep(new Random().Next(500,1000)); // пауза
        instance.ActiveTab.FullEmulationMouseClick("left", "click");
        System.Threading.Thread.Sleep(new Random().Next(1000,2000)); // пауза
        }
        else
        {
            project.SendInfoToLog("не лайкаем, а то уже лайкали", true);
        }
    System.Threading.Thread.Sleep(new Random().Next(1000,5000)); // то пауза 1-5 секунд
    var b3 = instance.ActiveTab.FindElementByXPath("//li[@data-item-id='" + ID + "']//button[@data-modal='ProfileTweet-retweet'][1]", 0);
        height = short.Parse(b3.GetAttribute("height"));
        if (height>0)
        {
            //b3.Click();
            instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(b3);
        System.Threading.Thread.Sleep(new Random().Next(800,2000)); // пауза
        instance.ActiveTab.FullEmulationMouseClick("left", "click");
            System.Threading.Thread.Sleep(new Random().Next(2000,5000)); // то пауза 2-5 секунд
            instance.ActiveTab.WaitDownloading();
            var b4 = instance.ActiveTab.FindElementByXPath("//div[@class='tweet-button']/button/span", 0);
            //b4.Click();
            instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(b4);
        System.Threading.Thread.Sleep(new Random().Next(800,1000)); // пауза
        instance.ActiveTab.FullEmulationMouseClick("left", "click");
            System.Threading.Thread.Sleep(new Random().Next(2000,5000)); // то пауза 2-5 секунд
            instance.ActiveTab.WaitDownloading();
        
        
        }
        else
        {
            project.SendInfoToLog("не ретвитим, а то уже ретвитали", true);
        }    
}
return Inner;
Это C# код с использованием XPath методов в зенно-браузере и полной эмуляцией движений мышки. Ищет первый незакрепленный именно твит (не ретвит), делает ему лайк и ретвит. Попутно проверяет делали ли мы уже для него такое, если делали, то ничего не делает, а только в лог об этом пишет.
В переменную project.Variables["Twit_Url"].Value сохраняет ссылку на твит который ми ретвитим.
 

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
orka13 не отобразилось всё описание
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
я там еще чуть правил код, если что то не заработало, то пробуй обновить страницу и сейчас скопировать. Или я не понял твоего поста.
а как реализовать на зенке такое действие: перейти в профиль по ссылке, открыть первый твит, скопировать ссылку этого твита... затем перейти ко второму твиту, открыть его, скопировать ссылку и т.д. до 10... как вообще переходить по твитам в твитленте профиля? какие экшены использовать? или тоже только на С# можно реализовать?
 

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
вопросы может легкие и очевидные, но для меня новичка, изучающего зенку это пока не понятно :ah:
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
а как реализовать на зенке такое действие: перейти в профиль по ссылке, открыть первый твит, скопировать ссылку этого твита... затем перейти ко второму твиту, открыть его, скопировать ссылку и т.д. до 10... как вообще переходить по твитам в твитленте профиля? какие экшены использовать? или тоже только на С# можно реализовать?
Так тут незачем переходить по твитах, можно банально в коде страницы найти по регулярке нужные ссылки и в список их сбросить.
Или может даже без браузера на Get-запросе или через API получить такие ссылки можно...
Если ничего из вышеописанного вы не знаете как делать, то сначала поизучайте азы работы с зенкой (например, по выдеокурсах Ростоникса), а тогда беритесь за задачу повторно.
 
  • Спасибо
Реакции: Mozgolom

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
получается что я в коде страницы нахожу ссылки, кидаю их например в текстовый файл и дальше работаю как со списком? мне хотя бы принципы уяснить )
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
  • Спасибо
Реакции: Mozgolom

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
если нужны абсолютно все твиты, то здесь либо API, если оно такое позволяет, либо в браузере (еще перед поиском) надо пару минут листать в низ страницу, чтобы загрузились все (вот тут может зависнуть). пробуйте, я такими целями не занимался, я у себя в шабе только последние свежие твитты обрабатывал.
 
  • Спасибо
Реакции: Mozgolom

Чешир

Client
Регистрация
27.06.2014
Сообщения
1 541
Благодарностей
904
Баллы
113
все твитты сам твиттер никому не показывает. Только последнюю тысячу. Все что глубже - в архиве, который может запросить только владелец архива и после этого какое-то время будут видны действительно все твитты.
 
  • Спасибо
Реакции: Mozgolom и orka13

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
C#:
// ссылка на ретвит = ссылке твита оригинала:
instance.ActiveTab.WaitDownloading();
string Resultat = "";
string ID = "";
short height = 0;
string Inner = "";
var b = instance.ActiveTab.FindElementByXPath("//li[@data-item-type='tweet'][not(.//span[@class='js-retweet-text']) and not(.//span[@class='js-pinned-text'])][.//button]", 0);
if (!b.IsVoid)
{
    Inner = b.InnerHtml;
    ID = b.GetAttribute("data-item-id");

    var b_url = b.FindChildByXPath(".//div[@data-permalink-path]", 0);
    string Twit_Url = b_url.GetAttribute("data-permalink-path");
    Twit_Url = "https://twitter.com" + Twit_Url;
    project.Variables["Twit_Url"].Value = Twit_Url;
   
    var b2 = instance.ActiveTab.FindElementByXPath("//li[@data-item-id='" + ID + "']//button[contains(@class, 'js-actionFavorite')]", 0);
    height = short.Parse(b2.GetAttribute("height"));
    if (height>0)
        {
            //b2.Click();
            instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(b2);
        System.Threading.Thread.Sleep(new Random().Next(500,1000)); // пауза
        instance.ActiveTab.FullEmulationMouseClick("left", "click");
        System.Threading.Thread.Sleep(new Random().Next(1000,2000)); // пауза
        }
        else
        {
            project.SendInfoToLog("не лайкаем, а то уже лайкали", true);
        }
    System.Threading.Thread.Sleep(new Random().Next(1000,5000)); // то пауза 1-5 секунд
    var b3 = instance.ActiveTab.FindElementByXPath("//li[@data-item-id='" + ID + "']//button[@data-modal='ProfileTweet-retweet'][1]", 0);
        height = short.Parse(b3.GetAttribute("height"));
        if (height>0)
        {
            //b3.Click();
            instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(b3);
        System.Threading.Thread.Sleep(new Random().Next(800,2000)); // пауза
        instance.ActiveTab.FullEmulationMouseClick("left", "click");
            System.Threading.Thread.Sleep(new Random().Next(2000,5000)); // то пауза 2-5 секунд
            instance.ActiveTab.WaitDownloading();
            var b4 = instance.ActiveTab.FindElementByXPath("//div[@class='tweet-button']/button/span", 0);
            //b4.Click();
            instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(b4);
        System.Threading.Thread.Sleep(new Random().Next(800,1000)); // пауза
        instance.ActiveTab.FullEmulationMouseClick("left", "click");
            System.Threading.Thread.Sleep(new Random().Next(2000,5000)); // то пауза 2-5 секунд
            instance.ActiveTab.WaitDownloading();
       
       
        }
        else
        {
            project.SendInfoToLog("не ретвитим, а то уже ретвитали", true);
        }   
}
return Inner;
Это C# код с использованием XPath методов в зенно-браузере и полной эмуляцией движений мышки. Ищет первый незакрепленный именно твит (не ретвит), делает ему лайк и ретвит. Попутно проверяет делали ли мы уже для него такое, если делали, то ничего не делает, а только в лог об этом пишет.
В переменную project.Variables["Twit_Url"].Value сохраняет ссылку на твит который ми ретвитим.
вставил код, ретвит и лайк не делает
в логах ошибку дает "No such variable: Twit_Url"
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
оно пишет что в проекте не создана переменная (просто пустая) "Twit_Url". Создайте ее руками.
 
  • Спасибо
Реакции: Mozgolom

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
оно пишет что в проекте не создана переменная ()просто пустая) "Twit_Url". Создайте ее руками.
да, всё помогло... всё заработало ))

в зенке имеет значение регистр в названии переменной получается?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
да.
 

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
а как теперь например сделать два ретвита... в цикл этот код не помогло... установка пустого значения для переменной Twit_Url тоже не помогло...
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
а как теперь например сделать два ретвита... в цикл этот код не помогло... установка пустого значения для переменной Twit_Url тоже не помогло...
Поиграйтесь с Xpath путями.
В этом участке кода:
var b = instance.ActiveTab.FindElementByXPath("//li[@data-item-type='tweet'][not(.//span[@class='js-retweet-text']) and not(.//span[@class='js-pinned-text'])][.//button]", 0);
шаблон как раз ищет первый твит и потом берет его ID и весь код ниже только с ним и работает.
Измените XPath путь, и шаблон будет с инным твитом работать, например поставьте там номер "1" вместо "0", и он лайкнет на 1 твит ниже.
 
Последнее редактирование:
  • Спасибо
Реакции: Mozgolom

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
спасибо большое... сделал, чтобы делал несколько ретвитов
 

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
а есть сниппет, чтобы делал ретвиты твитов не старее 7 дней от текущей?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
а есть сниппет, чтобы делал ретвиты твитов не старее 7 дней от текущей?
Хз, алгоритм я бы такой придумал:
в блоке исследуемого твита ищете строку с датой, конвертируете ее зенкой в удобный для обработки в C# формат (гуглите по форуму фразы типа "сравнить даты C#", "парсить дату в формате C#"), сравниваете с нужным временным диапазоном, если не подходит, то игнорируем этот твит и берем в обработку следующий...

UPD:
проверил в браузере, там в твите есть блок с датой в обычном и в Unix-формате, его Xpath:
Код:
.//span[@data-time]
 
  • Спасибо
Реакции: Mozgolom

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
а как искать Xpath элемента? какие книги посоветуете или ресурсы?
 

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
вот нашел как искать в хроме

Щелкните правой кнопкой мыши на любом элементе, для которого вы хотите xpath, и нажмите "Inspect Element", а затем снова внутри Inspector, щелкните правой кнопкой мыши элемент и нажмите "Скопировать Xpath".
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
а как искать Xpath элемента? какие книги посоветуете или ресурсы?
Я начинал с безбраузерного C#+Xpath, в браузерном почти то же самое, только чуть больше по правилам зенки оформлено. Но синтаксис самого Xpath одинаковый везде:
путеводитель для новичков при использовании ZennoPoster+xpath+HtmlAgilityPack+POST\GET
 
  • Спасибо
Реакции: Чешир и Mozgolom

Mozgolom

Новичок
Регистрация
05.06.2018
Сообщения
17
Благодарностей
0
Баллы
1
получается что xpath пользоваться лучше чем регуляркой и DOM

за полезные ссылки огромное спасибо, всё теперь понятнее становится )
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)