#!/usr/bin/env рубиновый | |
# кодировка: utf-8 | |
# ЗАДАЧА: | |
# | |
# 1. Отображение в исходном макете | |
#?. Задержка между запросами | |
требуют «rubygems» | |
требуется «нокогири» | |
требуется ‘open-uri’ | |
требуется ‘openssl’ | |
требуется ‘yaml’ | |
требуется ‘net/smtp’ | |
требуется «отстой» | |
требуется ‘dkim’ | |
@opts = Slop. parse do |o| | |
o.integer ‘-f’, ‘—first’, ‘Первая страница (1)’, по умолчанию: 1 | |
o.integer ‘-l’, ‘—last’, ‘Последняя страница (100)’, по умолчанию: 100 | |
o.integer ‘-a’, ‘—min_price’, ‘Минимальная цена (0)’, по умолчанию: 0 | |
o.integer ‘-b’, ‘—max_price’, ‘Максимальная цена (5000)’, по умолчанию: 5000 | |
o.string ‘-e’, ‘—exclude’, ‘Исключить «Строку» («»)’, по умолчанию: «» | |
o.string ‘-s’, ‘—storage’, ‘Путь к хранилищу (storage.yml)’, по умолчанию: «storage.yml» | |
o.string ‘-c’, ‘—category’, ‘URL категории строка («москва/телефоны/iphone»)’, по умолчанию: «москва/телефоны/iphone» | |
o. string ‘-d’, ‘—dkim_selector’, ‘Селектор DKIM («почта»)’, по умолчанию: «почта» | |
o.string ‘-k’, ‘—dkim_key’, ‘Путь к закрытому ключу DKIM («private.pem»)’, по умолчанию: «private.pem» | |
o.string ‘-t’, ‘—to’, ‘Кому: [email protected] («[email protected]»)’, по умолчанию: «[email protected]» | |
o.string ‘-F’, ‘—from’, ‘От: [email protected] («[email protected]»)’, по умолчанию: «[email protected]» | |
o.string ‘-S’, ‘—subject’, ‘Префикс темы письма («Avito-Huito:»)’, по умолчанию: «Avito-Huito: » | |
o.string ‘-W’, ‘—strict’, ‘Слово строгого фильтра. Например. самое важное из запроса («iphone»)’, по умолчанию: «iphone» | |
o. integer ‘-u’, ‘—user’, ‘0 = Все, 1 = Частные, 2 = Компании (0)’, по умолчанию: 0 | |
#o.integer ‘-n’, ‘—notify’, ‘0 = Все, 1 = Только новые (0)’, по умолчанию: 0 # ???????????? удалите это, вероятно, в будущем | |
o.boolean ‘-D’, ‘—no_dkim’, ‘Отключить DKIM (-)’ | |
o.boolean ‘-v’, ‘—verbose’, ‘Подробный режим (-)’ | |
o.on ‘—version’, ‘Показать текущую версию (0.2)’ сделать | |
прерывание(«Авито-Уито 0.2») | |
конец | |
конец | |
@exclude_words = «» | |
@opts[:exclude]. split(» «).each { |a| @exclude_words += » !#{a}» } | |
@mail = «Кому: #{@opts[:to]}\nОт кого: #{@opts[:from]}\nВерсия MIME: 1.0\nТип содержимого: text/html\nТема: #{@opts[ :subject]}#{@opts.arguments[0]}\n\n» | |
@mail_verbose = [] если @opts[:verbose] | |
, если (ARGV.length == 0) || (@opts.arguments.length == 0) | |
прервать(@opts.to_s) | |
конец | |
@colors_to_destroy_eyes = [:light_black, :light_red, :light_green, :light_yellow, :light_blue, :light_magenta, :light_cyan, :light_white] | |
по умолчанию opn_pag | |
page_start = @opts[:first] | |
page_end = @opts[:последний] | |
деф отладка (input_text) | |
помещает input_text, если @opts[:verbose] | |
конец | |
по определению pretty_print(url) | |
вернуть «https://www. avito.ru»+ссылка | |
конец | |
по определению add_to_output(хорошо) | |
отладка (хорошо[1].to_s + » » + pretty_print(хорошо[0])) | |
@mail += « #{хорошо[3]} #{хорошо[1]} #{хорошо[2]} » | |
#@mail_verbose.push(хорошо[4]), если @opts[:verbose] | |
конец | |
, если File.exist?(@opts[:storage]) | |
storage_array = YAML. load_file(@opts[:storage]) | |
avito_populate_old = массив_хранилища[0].uniq | |
, если page_start.nil? && (массив_хранилища.длина > 1) && (массив_хранилища[0].длина > 0) | |
page_start = storage_array[1][0]-1 | |
page_end = storage_array[1][1]+1, если page_end.nil? | |
конец | |
еще | |
avito_populate_old = [] | |
конец | |
avito_populate = [] | |
страниц = [] | |
для i в page_start. .page_end сделать | |
начало | |
addr = «https://m.avito.ru/#{@opts[:category]}?bt=0&i=1&s=1&user=#{@opts[:user]}&p=#{i}&q=# {(@opts.arguments[0]+@exclude_words).split(‘ ‘).join(‘+’)}» | |
помещает «Запрос: #{addr}», если @opts[:verbose] | |
Страница | = Nokogiri::HTML(open(URI.escape(addr), {ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE})) |
u = page.xpath(‘//статья[@data-item-premium=0]’)-page.css(‘.item-highlight’) | |
перерыв, если u.length == 0 | |
u.каждый сделать |s| | |
include_this = правда | |
цена = s. css(«div.item-price»)[0].content.gsub(/\p{Пробел}/,»).to_i | |
url = s.css(«a.item-link»)[0].values[0] | |
title = s.css(«span.header-text»)[0].content | |
img = s.css(«span.pseudo-img/@style»).first.value.gsub(/.*url\(\/\//, «http://»).gsub(/\) .*/, «»).gsub(«140×105», «640×480») | |
если (цена > @opts[:max_price]) || (цена < @opts[:min_price]) || (@opts[:strict] && !(url.include? @opts[:strict])) | |
include_this = ложь | |
конец | |
макет = s.inner_html | |
, если include_this | |
avito_populate. push([url, price, title, img, layout]) | |
страниц[0] = i, если страницы[0].nil? | |
страниц[1] = я | |
конец | |
конец | |
спасение | |
конец | |
конец | |
File.open(@opts[:storage], ‘w’) { |file| file.write([avito_populate.uniq, pages].to_yaml) } | |
отладка («Проданные товары:») | |
@mail += «Продано:» | |
(avito_populate_old-avito_populate). каждое действие |k| | |
add_to_output(k) | |
конец | |
отладка («Новые элементы:») | |
@mail += «Новинки:» | |
(avito_populate-avito_populate_old).каждое действие |k| | |
add_to_output(k) | |
конец | |
@mail += «Подробная информация:» + @mail_verbose. inspect if @opts[:verbose] | |
если !@opts[:no_dkim] | |
@mail = Dkim.sign(@mail, :selector => @opts[:dkim_selector], :private_key => OpenSSL::PKey::RSA.new(open(@opts[:dkim_key]).read), : домен => @opts[:from].split(«@»)[1]) | |
конец | |
# ((avito_populate_old-avito_populate).length > 0) || ( | |
если (avito_populate-avito_populate_old).length > 0 | |
Net::SMTP.start(‘127.0.0.1’) сделать |smtp| | |
smtp. send_message @mail, @opts[:from], @opts[:to] | |
конец | |
еще | |
отладка («Нет обновлений») | |
конец | |
конец | |
opn_pag |
Музыка – LO-FI | Журнал
Культура / Музыка
Наш второй «Гостевой микс» происходит из мифа, известного как Разное. Гражданин. Настройтесь на один из самых редких в Новой Зеландии в этом выпуске нашей серии «Guest Mix»!
Музыка
В течение 2020 года мы еженедельно добавляли плейлисты в Apple Music. Нажмите и догоните волну LO-FI сегодня!
Культура / Музыка
Создатель эклектичного контента Avito благословляет нас несколькими ритмами для нашего первого выпуска серии «Гостевой микс»! Насладитесь плавным сочетанием классического R&B и хип-хопа на Avito в LO-FI: The Magazine!
Музыка
«Coke Wave 2» — это эклектичная смесь стилей, звуков и потоков. Это один из лучших проектов в дискографии Max B и сертифицированный «Underground Gem». Исследуйте «Coke Wave» в этом выпуске «Underground Gems»!
Культура / Музыка
Wifigawd — один из самых разносторонних и плодовитых исполнителей рэп-игр. Уроженец Вашингтона, округ Колумбия, постоянно занят, выпуская одну классическую кассету за другой. Его музыка варьируется от безумия нью-эйджа, которого так жаждут андеграундные головы, до проникновенных и духовных звуков прошлых лет. Мы имели честь взять интервью у Wifi по электронной почте, чтобы получить представление о мире Washington Wizard.
Культура / Музыка
Subjxct 2oo4, вдохновитель производства из коллектива 2oo4 из Нью-Джерси, является одним из самых динамичных продюсеров игры. Его широкий спектр различных звуков, влияний и вкусов сливаются воедино, создавая его умопомрачительные биты. Subjxct с длинной дискографией и продюсерскими заслугами с целым набором легенд крайне недооценен как продюсер. Его чистые, полированные и экспериментальные звуковые ландшафты заслуживают большего блеска. В этом выпуске «Creator Spotlight» мы спросили Subjxct о его коллективе «2oo4», его увлечении профессиональным реслингом и многом другом.
Музыка
«Red Flame» и «Blue Flame» — два легендарных микстейпа Lil B. Узнайте, насколько эти два проекта важны для Lil B, в этом выпуске «Underground Gems»!
Культура / Музыка
Lil B был одним из самых вирусных артистов 2010-х годов. На протяжении всей его карьеры было много веселых интервью и выступлений. Мы разбираем их и перечисляем самые редкие моменты в карьере Lil B!
Музыка
В этом выпуске LO-FI: The Magazine мы попытаемся вызвать доверие к движению «Based». Анализируя записи «I’m Thraxx» и «6 Kiss», мы обсудим и объясним, как Lil B навсегда изменил музыкальный мир.
Музыка
В сегодняшней музыкальной среде Working On Dying известен как продюсерский коллектив, находящийся на подъеме. Благодаря работе с настоящими звездами, такими как Future, Lil Uzi Vert и Matt Ox, имя WOD стало нарицательным.