quickwin.ru

quickwin.ru

На Пикабу
477 рейтинг 9 подписчиков 0 подписок 10 постов 3 в горячем
Награды:
5 лет на Пикабу
6

Проблема поиска товаров в интернет магазине

Решили мы в процессе ремонта обновить кухню. Кухня была заказана в одном известном гипермаркете мебели и товаров для дома. В принципе, расчет, консультации и конечный результат меня порадовал. Но все операции были сделаны в реальном магазине в компании с реальными консультантами. Через интернет в этом магазине не было заказано ничего, потому что найти в нем через интернет то, что нужно, было довольно сложно.

Например, захожу на сайт самого магазина и набираю «столешница из камня». И вижу мойки вместо столешниц. В принципе, если напрячься и попутешествовать по каталогу, то столешницы из камня можно найти. Но, получается, что проблем и потерь времени будет меньше, если поиск начать с Яндекса, а потом уже поехать в реальный магазин.

Возьмём, к примеру, еще один известный магазин по продаже смартфонов, ноутбуков и планшетов. Набираю: «ноутбук 32гб». И он мне выдает «По запросу «ноутбук 32гб» найдено 10'390 товаров». Больше 10 тысяч товаров, Карл!

Если нужны пруфы в виде картинок, то их можно увидеть здесь

По-человечески, понятно, что если я ищу ноутбук с 32гб оперативной памяти, то мне не нужно показать чехлы непонятно от чего за 5 рублей. Даже если они продаются с очень большой скидкой. Понятно также, что у меня не хватит сил последовательно перебирать больше 10 тысяч товаров в поисках того, что мне нужно.

Собственно, у меня вопросы к двум категориям читателей Пикабу:

К посетителям интернет магазинов:

  • Случалось ли вам испытывать трудности при поиске товара в интернет-магазине?

  • Хотели бы вы, чтобы в поиске вам показывалось то, что вам нужно, а не все подряд, или хотя бы не то, что в магазине называется «Хиты продаж!»?

К владельцам интернет магазинов:

  • Если ваш поиск работает не совсем так, как надо постетителю сайта, это потому что в нашем мире все несовершенно, или же так и было задумано, и на самом деле, это маркетинговая фишка, которая позволяет продавать то, что нужно срочно продать?

  • Заинтересованы ли вы в поиске который находит то, что нужно посетителю сайта?

Показать полностью
249

КАК НАПИСАТЬ TELEGRAM BOT НА VBA?

ПРЕДЫСТОРИЯ

У моего заказчика случился один инцидент. Ну, как инцидент, обычная житейская история. У него в компании есть девушка (или женщина, все относительно), которая следит за днями рождений сотрудников, собирает деньги на подарок и т.д., короче, Шура – профсоюзная активистка из «Служебного романа» (помните?: «… если сегодня кто-нибудь еще родится или умрет, я останусь без обеда…»), только помоложе и без профсоюза.

И вот однажды подходит эта «Шура» к одному из сотрудников и просит его помочь ей поднять на этаж пиццу.

- Какую пиццу?

- У меня сегодня День рождения, я заказала на всех пиццу…

- (Ой-йо-мойо(!!???)) ну… это… я тебя поздравляю, пошли за пиццей… Коллеги! у «Шуры» сегодня День рождения!

Тут, конечно, началось… в спешке, пока «Шура» и «Шурик» исчезли в направлении пиццы, торопливые сборы ассигнаций, в ближайший цветочный ларёк направлялся гонец, и воздухе витала мысль: «Просрали полимеры день рождения девушки, которая о каждом из нас не забывала»…

Дабы не попадать в следующий раз впросак, заказчик попросил меня написать для их корпоративного Telegram чата некую программку, которая бы утром поздравляла тех, у кого день рождения (в компании около 200 человек), а за три дня до дня рождения персонально направляла каждому сотруднику группы/отдела, в котором работает будущий именинник, telegram-сообщение о грядущем событии.

«Деньги в руки – будут звуки». Что в результате получилось? Есть чат, в котором сотрудники обсуждают разные вопросы, в нем каждое утро в 9-00 появляется средних размеров сообщение на тему «10 знаменитых людей, родившихся в этот день». Если в «этот день» родился кто-то из компании заказчика, то этот кто-то оказывается в компании знаменитостей. Такой вот каламбур. Также индивидуально некоторые сотрудники получают сообщение от бота «Шура – профсоюзная активистка» о ДР за три дня до «грустного праздника».

Вот, такая преамбула.

Для реализации поставленной задачи я использовал API Telegram, c# и серверную инфраструктуру заказчика на платформе Microsoft.

ШАГ ЗА ШАГОМ

После создания заказной разработки на c# и .Net мне пришла в голову мысль: а можно ли запилить Telegram бот на VBA? На странице «Bot Code Examples» VBA среди множества языков нет, но ведь это не означает, что на нем нельзя написать бот для «телеги».

Попробую в этом посте заполнить "брешь". Сначала нужно сделать то, что делается для любого языка программирования – создать и прописать бота.


1) Для создания бота в Telegram найдите крестного отца всех telegram ботов - BotFather и дайте ему команду: «/newbot». В ответ отец всех telegram ботов попросит дать имя новому боту. Далее, нужно указать логин бота (username), заканчивающееся на bot. Вот бот готов. В доказательство свершившегося BotFather выдаст access token для доступа в Telegram API приблизительно такого вида: «1234567890:ABCDEFGabcdfgQWERTYUIOPasdfghjklZXC».

2) Нужно новорожденного бота пригласить в свою группу.

3) Все, бот может отправлять сообщения в эту группу.


Общая часть закончена. Теперь специфика Visual Basic for Application.

Попробуем отправить сообщение на VBA. Заранее прошу прощения за лубочный вид кодов. Как с помощью тега типа <VBA… раскрасить код на пикабу, мне неведомо, если такая возможность есть или недавно появилась – дайте знать. Если вы не хотите перебивать код с картинки, а хотите его просто скопировать, это можно сделать на странице моего сайта: https://www.quickwin.ru/Solutions/QandA :

КАК НАПИСАТЬ TELEGRAM BOT НА VBA? Vba, Telegram, Telegram бот, Visual basic, Utf-8, Бот, Длиннопост

Конкретно этот код работает. Проблема возникнет, если вы попытаетесь отправить сообщение на русском языке. В этом случае от Telegram вы получите ответ: «Bad Request: strings must be encoded in UTF-8».

У VBA, к сожалению, нет встроенной функции перевода в требуемый формат (UTF-8). "Что же делать? Что же делать? Надо выпить".

Можно придумать свой собственный велосипед на тему: «URL Encoding», в соответствии с RFC-3986, можно найти на просторах интернета множество чужих велосипедов разной степени глючности и «доработать напильником», но я бы предложил велосипед не изобретать, а воспользоваться функцией JavaScript encodeURIComponent(), она заменяет «неправильные» символы процентными (escape-) последовательностями, представляющими кодировку символа UTF-8.

КАК НАПИСАТЬ TELEGRAM BOT НА VBA? Vba, Telegram, Telegram бот, Visual basic, Utf-8, Бот, Длиннопост

Это окошко в возможности JavaScript меня уже неоднократно выручало.

Соответственно, функция SendAMessage2TheTelegram будет выглядеть так:

КАК НАПИСАТЬ TELEGRAM BOT НА VBA? Vba, Telegram, Telegram бот, Visual basic, Utf-8, Бот, Длиннопост

Теперь сообщения с русскими буквами прекрасно перевариваются Telegram API. Отдельный вопрос: как узнать id чата, если речь идет о группе или даже конкретной персоне, а не о канале?

Для этого нужно отправить какое-либо сообщение боту из чата, в который вы планируете отправлять сообщения бота.

Например, такое: «/myid @UserNameOfMybot».

После чего посмотреть на историю сообщений бота с помощью команды, которую можно отправить из, например, Google Chrome:

https://api.telegram.org/bot1234567890:AAAAAAAAAAAAAAAAAAAAA...

Посмотреть на последние строчки истории и найти собственное сообщение в структуре JSON. Там должен быть и такой фрагмент: "chat":{"id": 123456789. 123456789- на месте этих цифр должен быть ID чата для переменной ChatID.

Изначально я думал создать на c# com компонент для VBA, с большим набором функций по работе с Telegram. Но нужен ли такой com-компонент? – я пока не решил. Так что этот вопрос тоже можно обсудить.

Показать полностью 3
8

Чукча не читатель, чукча - писатель

В моей практике приемки-передачи исходников от старых программистов новым из уст новых практически всегда звучит одно и то же заключение по результатам беглого ревью трудов своего предшественника: «Какой быдлокодер написал этот говнокод!?»

Конечно, предлагается выбросить «эту мешанину, не соответствующую никаким правильным парадигмам» и написать все заново, чтобы все было безупречно…

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

А знаете почему? – потому что прочитать код сложнее, чем написать его.

78

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel?

В этом посте я покажу, как с помощью VBA сделать, то, для чего VBA вроде бы как изначально не предназначен – как получить значения нужных переменных из структуры JSON.

Этот пост сделан по мотивам просьбы моего первого и пока единственного подписчика, сделавшего комментарий на предыдущий пост «Макрос получения курсов доллара за период с сайта Банка России»

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

В чем отличие между сервисом ЦБ России и сайтом worldometers.info? В том, что ЦБ предлагает XML сервис для автоматической загрузки информации (см. http://www.cbr.ru/development/SXML/) – ее неудобно смотреть через веб браузер, но удобно получать с помощью паучьих алгоритмов, а worldometers.info предлагает информацию для людей, а не для пауков.

Поэтому создаваемому на VBA паучку придется постараться, чтобы понять разметку «для людей».

Для работы паука необходимо дополнительно подключить три библиотеки:

1. Microsoft XML parser (MSXML) – тот же, что использовался для получения курсов ЦБ с сайта Банка России.

2. Библиотеку для работы с объектной моделью HTML.

3. Библиотеку для использования возможностей JavaScript из VBA.

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Поехали:

1) Запускаем паучка на сайт: https://www.worldometers.info/coronavirus/coronavirus-cases/

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Получаем html с сайта:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

В полученном html паучку нужно найти и распарсить данные о количестве зарегистрированных случаев из формата JSON. Эти данные представлены вторым аргументом в вызове функции Highcharts.chart(chartName, chartData), которая на сайте рисует график.

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

В результате выполнения нижепредставленного кода в переменной strJson должна оказаться структура с данными в JSON формате.

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Теперь самое интересное – как распарсить эту JSON структуру? Чистый VBA это делать не умеет. Но с JSON прекрасно работает JavaScript. А в VBA есть инструмент для использования возможностей JavaScript для пользователей MS Excel.

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Мы можем в VBA получить уже распарсенную JSON переменную:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Проблема в том, что с объектом objJSON ничего нельзя сделать в рамках VBA – у него нет ни свойств, ни методов. Поэтому создаем эти методы на языке JavaScript. Нам нужно вытащить даты (xAxis) и количество (series->data):

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Вот что пишем в VBA редакторе:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Загоняем данные в привычные VBA массивы:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Ну и раскатываем эти массивы по рабочему листу:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Вот, что получилось в результате на листе рабочей книги:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

По этим данным легко построить график, например, такой:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Если захотите получить готовый файл Excel с рабочим кодом – дайте знать в комментариях.

Показать полностью 14
46

Макрос получения курсов доллара за период с сайта Банка России

Excel (Эксель) прекрасен, а мир огромен. И готов предложить для анализа много разной информации из сети под названием Интернет. Часто видел, как аналитики мужеского и женского рода просто перебивают ручками данные со страниц разных сайтов для своей работы.

Иногда целесообразнее написать небольшой макрос, который будет получать данные из интернета автоматически. Для этого уже давно придуман Microsoft XML parser (MSXML).

Для примера, я и покажу, как с его помощью, получить курсы доллара за период с сайта ЦБ.

1) Организуйте столбец с датами на одной из «Sheets» экселя. У меня это столбец «A»

2) Подключите ссылку на Microsoft XML

3) Собственно пишем процедуру

Sub GetUSDRates4Period()

Объявляем переменные и открываем окно в мир интернета:

Dim strCCY As String, strRateCCY As String, strRateSource As String

Dim xmlDoc As MSXML2.DOMDocument

Set xmlDoc = New MSXML2.DOMDocument

xmlDoc.async = False

MSXML2 – это и есть упомянутый выше Microsoft XML parser, который нужно направить на сайт Банка России

strRateSource = "http://www.cbr.ru/scripts/XML_daily.asp?date_req="

Запрос будет неполным без указания даты, которую для каждой строчки мы возьмем из столбца, который предварительно датами заполнили.

Dim i As Long

i = 1

Dim strDate As String

Do While Not Range("a" & i) = ""

strDate = Format(Range("a" & i), "dd\/mm\/yyyy")

Всякое бывает с сайтами или вашим интернетом, поэтому нужно проверить результаты попытка загрузки xml файла.

If xmlDoc.Load(strRateSource & strDate) <> True Then

MsgBox "Сайт ЦБ сейчас не в духе, попробуйте обратиться к нему позже..."

Exit Sub

End If

Если же загрузка прошла успешно, то начинается магия xPath. Сначала получим дату, к которой на самом деле привязан курс доллара. Она не всегда совпадает с той датой, на которую вы курс запросили. И поместим дату ЦБ в столбец «B»

Range("b" & i) = xmlDoc.selectNodes("//ValCurs")(0).Attributes(0).Text

"//ValCurs" – это и есть выражение XPath, которое может быть очень интересным и витиеватым, и которое позволяет добраться практически до любой точки xml файла. В вышеприведенном примере я взял дату валютирования из тега ValCurs.

А ниже выражение посложнее. С его помощью я нахожу валюту «доллар» среди множества других (у этой валюты ID=R01235) и прошу показать мне только курс этой валюты (там есть и другая информация: буквенный и цифровой коды валюты в соответствии с ISO 4217 и/или ОКВ, номинал, описание, - но нам нужен только курс).

strRateCCY = xmlDoc.selectNodes("//Valute[@ID='R01235']/Value")(0).Text

Далее я привожу текст с курсом к числу с учетом настроек символа разделителя разрядов.

Range("c" & i).Value = CdblLocaleIndependent(strRateCCY)

Функцию CdblLocaleIndependent в этом посте показывать не буду, пока желающих на нее посмотреть не будет достаточно.

Закругляемся с циклом и заканчиваем работу:

i = i + 1

Loop

MsgBox "Курсы сняты с сайта Банка России."

End Sub

Показать полностью
2

Храбрецы и трусы

Кем бы вы предпочли быть? Храбрецом или трусом? Постыдно ли быть трусом? Большинство (а точнее говоря, все) опрошенные мной знакомые на словах утверждают, что трусом быть постыдно. Не путают ли они разумную осторожность с трусостью?

Великие мыслители делают не столь однозначные выводы:

«Я люблю храбрых: но недостаточно быть рубакой, нужно еще знать, кого рубить! И часто больше храбрости бывает в том, чтобы удержаться и пройти мимо: и сохранить себя тем самым для более достойного врага!» (Ницше)

«Жажда славы, боязнь позора, погоня за богатством, желание устроить жизнь удобно и приятно, стремление унизить других — вот что нередко лежит в основе доблести, столь превозносимой людьми» (Ларошфуко)

А давайте попробуем промоделировать, кем быть лучше: трусом или храбрецом, - с математической точки зрения.

В далекой далекой галактике на планете, да хоть Татуин, живет народ, состоящий из трусов (джав, раз уж выбрана канва Звездных войн) и храбрецов (тускенов). И трусы и храбрецы питаются ресурсами, которые посылает им двойная звезда Тату1 и Тату2. Честно говоря, не уверен я, что джав можно отнести к трусам, а тускенов к храбрецам. Ну не стирать же то, что уже написал

Жизнь на планете Татуин идет своим чередом. Каждый цикл звезда Тату посылает на Татуин 200 ресурсов.

Ресурсы разбираются жителями в конкурентной борьбе по следующим правилам:

• За каждый ресурс борются два случайно выбранных жителя в рамках одного раунда. После каждого раунда (а их всего двести – по количеству ресурсов) число участников не уменьшается. Т.е. каждый житель имеет теоретическую возможность принять участие в борьбе за ресурс несколько раз в рамках одного цикла.

• Если выбраны трус и храбрец, то храбрец забирает ресурс, а трус трусливо убегает, оставшись ни с чем.

• Если выбраны два храбреца, то один из храбрецов погибает в схватке, а другой забирает себе ресурс. Вероятность 50/50.

• Если выбраны два труса, с равной вероятностью ресурс может достаться:

1. Одному из трусов p=1/3

2. Другому из трусов p=1/3

3. Трусы договариваются и делят ресурс поровну p=1/3

После того как ресурсы разобраны, наступает очередь размножения: Если у жителя накопилось больше или равно двух ресурсов, то с вероятностью 50% он порождает себе подобного, и отдает отпрыску 1 ресурс.

После размножения наступает очередь питания. Каждый цикл и трусу и храбрецу требуется 0.25 ресурса для продолжения жизни в следующем цикле. Если кушать нечего – житель умирает.

Начальные условия: 100 трусов, 100 храбрецов, и у каждого по 1 ресурсу.

Узнать соотношение трусов и храбрецов через пару пару сотен циклов.

Как вы думаете, кто выживет в таких условиях игры? Трусы? Храбрецы? Или, допустим, жизнь стабилизируется: буду жить процентов 25% храбрецов и процентов 75% трусов?

Честно говоря, до моделирования, я приблизительно так и думал, но результаты оказались не так просты, хотя и логичны. И чем-то напомнили мне волны Эллиота.

Изначально трусы вырвались вперед, став желанными конкурентами для храбрецов. А потом храбрецы начали забирать ресурсы у трусов, и уничтожать друг друга. В результате население планеты пошло на убыль. Храбрецы убивали друг друга, а трусы умирали от голода. И лишь когда ресурсов стало снова много, трусы перестали умирать от голода и чаще встречаться храбрецам, отчего те стали реже друг друга убивать, но как только жителей стало много, население снова пошло на убыль. И такие качели продолжаются с периодом около 30 лет в моей модели. Похоже на кризисы капитализма: «…советская политэкономия рассматривала в качестве фундаментальной причины кризисов капитализма имманентное противоречие этого общественного строя: между общественным характером производства и частнокапиталистической формой присвоения его результатов. Это противоречие является главным движителем смены производственных циклов, повторяющихся каждый 7-10 лет».

Храбрецы и трусы Смелость, Трусы, Выживание, Рождение ребенка
Показать полностью 1
0

Не надо тотальной проверки пропусков!

Очень короткий пост, как реакция на фотки, которые присылают мне мои знакомые в вотсапе, подтвержденные данной статьей:



Не надо проверять пропуска у всех подряд. Проверяйте выборочно.

14

Не надо тотальной проверки пропусков!

Очень короткий пост, как реакция на фотки, которые присылают мне мои знакомые в вотсапе, подтвержденные данной статьей:


https://www.vedomosti.ru/society/galleries/2020/04/15/828077...


Совет московским властям, а также просьба и требование:


Уважаемые блюстители московского порядка!

Не надо проверять пропуска у всех подряд. Проверяйте выборочно.

Тотальной проверкой вы превращаете самоизоляцию в профанацию, а станции метро в многочисленные рассадники заразы.

Отличная работа, все прочитано!