Счётчик
-
Всем привет. Есть скрипт, который делает ставки на товары на ебей. Появилась нужда ограничить количество успешных ставок на одного продавца. То есть скрипт заходит в подходящий товар, считывает имя продавца, проверяет кол-во ставок у конкретно этого продавца и на основании этого либо делает новую ставку (с увеличением счётчика) либо выходит.
Вопрос в реализации такого счётчика, мои думки:
- Каждому продавцу давать переменную: при ставке считывать имя продавца и задавать переменную с таким именем и увеличивать её на 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, с начала устанавливаются значения, а потом увеличиваются.
-
@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]])
-
@Tacker-Donovan, сохраняете в файл предварительно переведя объект в строку
[[SELLERS_COUNTER_STR]] = JSON.stringify([[SELLERS_COUNTER]])
, а после извлечения из файла обратно переводите в объект[[SELLERS_COUNTER]] = JSON.parse([[SELLERS_COUNTER_STR]])
слишком сложно пока :(
В общем будет ли js в моём случае полезнее, чем штатный функционал? Пока что я понял, что только js может создать переменные с динамическими именами. Не понял как их считать из файла и записать на то же место, чтобы скрипт успешно их перебирал.
-
@Tacker-Donovan, js это штатный функционал, да и многие действия являются обертками для js функций.
-
SELLERS_COUNTER
а как можно сделать такую переменную в глобальном варианте?
-
@shtorm
В онапликейшн создаете глобальную SELLERS_COUNTER
-
@000 это понятно, но она потом пустая в переменных, локальная нормально работает. Но нужен именно глобальный счетчик, для разных потоков/акков
-
@shtorm причем тут локальная?
вам же написалиглобальную
-
@tet-vivi ок, нужна рабочая глобальная)
хотя чет мне кажется не будет такого. по аналогии как ресурсы работают глобально, а списки уже нет