Счётчик



  • Всем привет. Есть скрипт, который делает ставки на товары на ебей. Появилась нужда ограничить количество успешных ставок на одного продавца. То есть скрипт заходит в подходящий товар, считывает имя продавца, проверяет кол-во ставок у конкретно этого продавца и на основании этого либо делает новую ставку (с увеличением счётчика) либо выходит.

    Вопрос в реализации такого счётчика, мои думки:

    • Каждому продавцу давать переменную: при ставке считывать имя продавца и задавать переменную с таким именем и увеличивать её на 1, но как реализовать такую переменную и как указывать её в дальнейшем коде?
    • Каждого продавца вносить в список/файл: при ставке считывать имя продавца проверять и вносить его в список/файл. Как в таком случае корректно работать с файлом? Напр. внёс в файл "prodavec001;1", где указано имя и кол-во ставок, по идее эту инфу можно спарсить, но как выцеплять нужную строку?

    Надеюсь, что понятно объяснил. Прошу не готового решения, а направления, в котором копать.



  • @Tacker-Donovan Выцеплять нужную строку перебором через цикл



  • @smeckoi77 said in Счётчик:

    @Tacker-Donovan Выцеплять нужную строку перебором через цикл

    А каким образом её выцепить, если она будет вида "prodavec001;1" (запрос частичного совпадения через js?)? Как её проапдейтить при следующей ставке, чтобы стало "prodavec001;2"?



  • @Tacker-Donovan, использовать js обект
    @GhostZ said in Переменные в имени переменных:

    Ну и если нужно название из переменной то можно использовать js объекты.

    VAR_OBJ = {};
    
    VAR_TEST = "file";
    VAR_OBJ[VAR_TEST] = "test1";
    VAR_TEST = "folder";
    VAR_OBJ[VAR_TEST] = "test2";
    
    VAR_OBJ.file или VAR_OBJ["file"] или VAR_OBJ[VAR_TEST]  (где VAR_TEST равна "file") //"test1"
    VAR_OBJ.folder //"test2"
    


  • @Tacker-Donovan said in Счётчик:

    @smeckoi77 said in Счётчик:

    @Tacker-Donovan Выцеплять нужную строку перебором через цикл

    А каким образом её выцепить, если она будет вида "prodavec001;1" (запрос частичного совпадения через js?)? Как её проапдейтить при следующей ставке, чтобы стало "prodavec001;2"?

    Парсить на две переменные



  • eb_seller.xml
    ebay_sellerlog.txt (должен содержать хотя бы одну строку, иначе скрипт виснет)

    Посмотрите тестовый скрипт кому интересно. Он собирает имена продавцов и пишет в файл, но суммировать не умеет (точнее не корректно это делает). Если в ресурсе задать обновление файла, то скрипт зацикливается.

    Принцип работы:

    • открывает список поиска, и начинает цикл
    • заходит в каждую строку, подходящую под условие
    • читает имя продавца
    • парсит файл и сравнивает имена (спарсенная строка удаляется)
    • при совпадении имени увеличивает счётчик, записывает в файл, сбрасывает счётчик на 0, идёт на след. круг цикла
    • при несовпадении пишет в файл со счётчиком = 1 (т.е. записывает то, что спарсил, т.к. строка уже удалена и её нельзя потерять), сбрасывает счётчик на 0 и продолжает парсить
    • при исчерпании ресурсов в файле записывает текущего продавца со счётчиком = 1 (т.е. вносит нового продавца, которого в списке ещё не было)

    Из-за того, что скрипт не читает внесённые им же изменения, то новозаписанный продавец не суммируется при следующем совпадении, а пишется дублем ниже. Если разрешить скрипту видеть свои изменения (вкл. обновление файла), то он зацикливается на этапе сравнения, т.к. он записывает в файл новую строку и следующим этапом проверяет её (а этого делать не надо, т.к. строка уже проверена)

    Если есть мысли как поправить или допилить прошу поделиться.



  • @Tacker-Donovan, почему вы не хотите сделать через js обект?
    Вот пример obj_test.xml, с начала устанавливаются значения, а потом увеличиваются.
    cf43ed0b-80e1-4574-bbfe-0405bb910a5c-image.png



  • @Tacker-Donovan, в вашем скрипте это выглядело бы примерно так

    //Устанавливаете переменную
    [[SELLERS_COUNTER]] = {}
    
    //Используете переменную, в переменной SELLER ник продавца
    if([[SELLERS_COUNTER]][VAR_SELLER]){
        [[SELLERS_COUNTER]][VAR_SELLER] += 1 //Увеличиваем счетчик
    }else{
        [[SELLERS_COUNTER]][VAR_SELLER] = 1 //Устанавливаем счетчик
    }
    


  • @GhostZ да я не против использовать, но для этого нужно понимать js. Сначала пробую штатные средства, вот зашёл в тупик, спросил. А с js даже не знаю куда чего, вот буду с вашим тестовым скриптом ща колдовать.

    Опять же есть нужда извлечь данные из файла и загнать туда же потом, чтобы сохранить эти счётчики, как можно реализовать это? Считывать весь файл, парсить и загонять кодом в переменные а в конце массово сохранять текущие значения? А если цикл бесконечный?



  • @smeckoi77 said in Счётчик:

    @Tacker-Donovan Выцеплять нужную строку перебором через цикл

    Так и есть "Foreach"



  • @Tacker-Donovan, сохраняете в файл предварительно переведя объект в строку [[SELLERS_COUNTER_STR]] = JSON.stringify([[SELLERS_COUNTER]]), а после извлечения из файла обратно переводите в объект [[SELLERS_COUNTER]] = JSON.parse([[SELLERS_COUNTER_STR]])



  • @GhostZ said in Счётчик:

    @Tacker-Donovan, сохраняете в файл предварительно переведя объект в строку [[SELLERS_COUNTER_STR]] = JSON.stringify([[SELLERS_COUNTER]]), а после извлечения из файла обратно переводите в объект [[SELLERS_COUNTER]] = JSON.parse([[SELLERS_COUNTER_STR]])

    слишком сложно пока :(
    В общем будет ли js в моём случае полезнее, чем штатный функционал? Пока что я понял, что только js может создать переменные с динамическими именами. Не понял как их считать из файла и записать на то же место, чтобы скрипт успешно их перебирал.



  • @Tacker-Donovan, js это штатный функционал, да и многие действия являются обертками для js функций.



  • @GhostZ said in Счётчик:

    SELLERS_COUNTER

    а как можно сделать такую переменную в глобальном варианте?



  • @shtorm
    В онапликейшн создаете глобальную SELLERS_COUNTER



  • @000 это понятно, но она потом пустая в переменных, локальная нормально работает. Но нужен именно глобальный счетчик, для разных потоков/акков



  • @shtorm причем тут локальная?
    вам же написали глобальную



  • @tet-vivi ок, нужна рабочая глобальная)

    хотя чет мне кажется не будет такого. по аналогии как ресурсы работают глобально, а списки уже нет


Log in to reply