• Как склеить несколько процедур для работы паралельно в асинхрнном режиме?

    omegastripes
    @omegastripes
    Подобный тестовый пример для юзербота Telethon 1.24.0 и веб-сервера aiohttp 3.8.1.

    pip install telethon
    pip install aiohttp


    Тестировалось на Python 3.6.9 Ubuntu 18.04.5 LTS и Python 3.8.6 Windows 7 x64

    import asyncio
    from telethon import TelegramClient, events
    from aiohttp import web
    
    session_name = 'test'
    api_id = 6
    api_hash = 'eb06d4abfb49dc3eeb1aeb98ae0f581e'
    
    
    async def main_userbot():
        client = TelegramClient(session_name, api_id, api_hash)
    
        @client.on(events.NewMessage(pattern='(?i)hellox'))
        async def handler(event):
            print(event.stringify())
            await event.respond('Hi admin!')
    
        await client.start()
        me = await client.get_me()
        print(me.stringify())
        await client.run_until_disconnected()
    
    
    async def main_web():
        app = web.Application()
        routes = web.RouteTableDef()
    
        @routes.get('/')
        @routes.get('/{name}')
        async def handle(request):
            name = request.match_info.get('name', "Anonymous")
            print('get from ' + name)
            text = "Hello, " + name
            return web.Response(text=text)
    
        app.add_routes(routes)
        runner = web.AppRunner(app)
        await runner.setup()
        site = web.TCPSite(runner, host='0.0.0.0', port=8000)
        await site.start()
        print('running web server...')
        await asyncio.Event().wait()
    
    
    async def main():
        await asyncio.gather(
            main_userbot(),
            main_web(),
        )
    
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())


    Помогли материалы по ссылкам
    https://docs.telethon.dev/en/latest/concepts/async...
    https://docs.aiohttp.org/en/stable/web_quickstart....
    https://docs.aiohttp.org/en/stable/web_advanced.ht...
    https://stackoverflow.com/questions/53465862/pytho...
    https://stackoverflow.com/questions/49978396/detai...
    Ответ написан
    Комментировать
  • Как расшифровать gzip архив из file_get_contents?

    omegastripes
    @omegastripes
    Мне помог вот такой код:
    $url = 'https://www.kinopoisk.ru/';
    $options = [
    	'http' => [
    		'method' => 'GET',
    		'header' => 'user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
    	],
    	'ssl' => [
    		'verify_peer' => false,
    		'verify_peer_name' => false
    	]
    ];
    $context = stream_context_create($options);
    $resp = file_get_contents($url, false, $context);
    foreach($http_response_header as $c => $h) {
    	if(stristr($h, 'content-encoding') and stristr($h, 'gzip')) {
    		$resp = gzinflate(substr($resp, 10, -8));
    		break;
    	}
    }
    Ответ написан
    Комментировать
  • Не получается загрузить новые карточки товара в битрикс при помощи "csv"?

    omegastripes
    @omegastripes
    Может кому-то пригодится... Сам убил несколько часов, решая эту проблему.

    Сначала нужно настроить поля, которые должны отображаться при экспорте и импорте CSV:
    Меню - Настройки - Настройки модулей - Торговый каталог, Закладка "Экспорт/Импорт", Раздел "Экспорт / импорт из CSV", Ctrl + левым кликом выделить в списках поля, которые должны отображаться при экспорте / импорте, сохранить.

    Далее у меня так и не заработало, пока не сделал следующее:
    Меню - Контент - Инфоблоки - Типы инфоблоков - Каталог товаров - Каталог, Закладки "Поля" и "Поля разделов", Блок "Символьный код", снять галку "Использовать внешний сервис для перевода" (остальные галки в блоке стоят), сохранить.

    Следует заметить, что импорт CSV, в общем случае, может осуществляться по разному:

    Меню - Магазин - Настройки - Импорт данных, профиль "Import CSV (new)", кликнуть профиль "по умолчанию".
    Меню - Контент - Инфоблоки - Импорт - CSV.

    При этом, в первом случае проблемное поле обозначается как IE_CODE - Символьный код (B_IBLOCK_ELEMENT.CODE), а во втором IE_CODE - Мнемонический код (B_IBLOCK_ELEMENT.CODE). То есть имя поля в файле CSV всегда неизменно - "IE_CODE", а имя поля в БД - различно. Что интересно во втором случае половины полей не отображается, в частности у меня нет цены.

    При импорте поставить галки "Первая строка содержит имена полей", "Использовать настройки инфоблока для транслитерации символьных кодов". Ну и, естественно, при сохранении файла CSV из Excel необходимо перед загрузкой открыть его, например, в Notepad++, в меню Кодировка преобразовать в UTF-8, сохранить.

    Вообще, я для себя сделал табличку соответствия полей.
    5bc22c7550752565077560.png
    Ответ написан
    Комментировать
  • Как переопределить массив внутри массива?

    omegastripes
    @omegastripes
    В этом случае единственный выход - скопировать вложенный массив в переменную, модифицировать и перезаписать поверх старого.
    Dim arrData(5)
    arrData(0) = Array(1, 10, 100)
    arrData(1) = Array(2, 20, 200)
    
    arrTmp = arrData(1)
    ReDim Preserve arrTmp(9)
    arrData(1) = arrTmp
    
    MsgBox UBound(arrData(1)) ' 9
    Ответ написан
    Комментировать
  • Не запускается vbs в реестре, как исправить?

    omegastripes
    @omegastripes
    Файлы .vbs не являются исполнимыми, для их запуска используются wscript.exe и cscript.exe. В вашем случае Cmdline должен быть вроде этого (вероятно, потребуется указать полный путь к wscript.exe):
    wscript.exe C:\test\ScanInvis.vbs C:\test\ScanInvis.bat /StiDevice:%1 /StiEvent:%2

    Касательно конвертированных в .exe скриптов замечу, что они палятся антивирусами со страшной силой. Единственные программы, которые позволили мне в свое время получить "чистый" .exe из VB - PrimalScript и Portable VB6.0.
    Ответ написан
    Комментировать
  • Скачать картинки по url на пк с использованием vbs?

    omegastripes
    @omegastripes
    Если речь о WSH VBS, вот самый простой пример:

    sUrl = "http://coverlib.com/Download/1729291/The_Prodigy-The_Fat_Of_The_Land_UK-Front-.JPG"
    sPath = "C:\Test\cover.jpg"
    
    With CreateObject("Microsoft.XMLHTTP")
    	.Open "GET", sUrl, False
    	.Send
    	aContent = .ResponseBody
    End With
    With CreateObject("ADODB.Stream")
    	.Type = 1 ' adTypeBinary
    	.Open
    	.Write aContent
    	.SaveToFile sPath, 2 ' adSaveCreateOverWrite
    	.Close
    End With
    Ответ написан
    Комментировать
  • Как удалить свойства файла скриптом (bat, vbs)?

    omegastripes
    @omegastripes
    Например, для удаления свойств и личной информации из Excel файлов, можно сохранить приведенный ниже код в виде файла .vbs, и для удаления свойств - просто перетащить нужные файлы Excel на файл скрипта.

    Option Explicit
    Dim sSrc, oWB, oProp
    With CreateObject("Excel.Application")
    	.Visible = False
    	.DisplayAlerts = False
    	For Each sSrc in WScript.Arguments
    		On Error Resume Next
    		Set oWB = .Workbooks.Open(sSrc)
    		On Error Goto 0
    		If .Workbooks.Count > 0 Then
    			For Each oProp In oWB.BuiltinDocumentProperties
    				oProp.Value = Empty
    			Next
    			.UserName = " "
    			oWB.Save
    			oWB.Close
    		End If
    	Next
    	.Quit
    End With
    CreateObject("WScript.Shell").PopUp "Completed", 1, , 64
    Ответ написан
    1 комментарий
  • Как передать переменную аргументом к другой программе в VBS ?

    omegastripes
    @omegastripes
    WshShell.Run "cmd.exe /c read.cmd " & driveleter(ii), 0, false

    Нативного дебаггера нет. Достаточно функционален Microsoft Script Editor из комлекта Office, необходимо запускать скрипт с директивой //X в командной строке, лично я для этого настроил в Notepad++ горячие клавиши типа "C:\WINDOWS\SysWOW64\wscript.exe" //x "$(FULL_CURRENT_PATH)". Так же можно посмотреть в сторону VbsEdit и PrimalScript.
    Ответ написан
    Комментировать
  • Книги, методички для изучения VBA с нуля?

    omegastripes
    @omegastripes
    Ответ написан
    Комментировать
  • Через что можно сделать ввод большого текста с переходами на новые строки в VBS?

    omegastripes
    @omegastripes
    dim completed
    
    msgbox inputboxml("Enter text:", "Multiline inputbox via HTA", "default" & vbcrlf & vbtab & "multiline" & vbcrlf & "text")
    
    function inputboxml(prompt, title, defval)
    	set window = createwindow()
    	completed = 0
    	defval = replace(replace(replace(defval, "&", "&amp;"), "<", "&lt;"), ">", "&gt;")
    	with window
    		with .document
    			.title = title
    			.body.style.background = "buttonface"
    			.body.style.fontfamily = "consolas, courier new"
    			.body.style.fontsize = "8pt"
    			.body.innerhtml = "<div><center><nobr>" & prompt & "</nobr><br><br></center><textarea id='hta_textarea' style='font-family: consolas, courier new; width: 100%; height: 580px;'>" & defval & "</textarea><br><button id='hta_cancel' style='font-family: consolas, courier new; width: 85px; margin: 10px; padding: 3px; float: right;'>Cancel</button><button id='hta_ok' style='font-family: consolas, courier new; width: 85px; margin: 10px; padding: 3px; float: right;'>OK</button></div>"
    		end with
    		.resizeto 700, 700
    		.moveto 100, 100
    	end with
    	window.hta_textarea.focus
    	set window.hta_cancel.onclick = getref("hta_cancel")
    	set window.hta_ok.onclick = getref("hta_ok")
    	set window.document.body.onunload = getref("hta_onunload")
    	do until completed > 0
    		wscript.sleep 10
    	loop
    	select case completed
    	case 1
    		inputboxml = ""
    	case 2
    		inputboxml = ""
    		window.close
    	case 3
    		inputboxml = window.hta_textarea.value
    		window.close
    	end select
    end function
    
    function createwindow()
        rem source http://forum.script-coding.com/viewtopic.php?pid=75356#p75356
        dim signature, shellwnd, proc
        on error resume next
        signature = left(createobject("Scriptlet.TypeLib").guid, 38)
        do
    		set proc = createobject("WScript.Shell").exec("mshta ""about:<head><script>moveTo(-32000,-32000);</script><hta:application id=app border=dialog minimizebutton=no maximizebutton=no scroll=no showintaskbar=yes contextmenu=no selection=yes innerborder=no icon=""%windir%\system32\notepad.exe""/><object id='shellwindow' classid='clsid:8856F961-340A-11D0-A96B-00C04FD705A2'><param name=RegisterAsBrowser value=1></object><script>shellwindow.putproperty('" & signature & "',document.parentWindow);</script></head>""")
    		do
    			if proc.status > 0 then exit do
    			for each shellwnd in createobject("Shell.Application").windows
    				set createwindow = shellwnd.getproperty(signature)
    				if err.number = 0 then exit function
    				err.clear
    			next
    		loop
    	loop
    end function
    
    sub hta_onunload
    	completed = 1
    end sub
    
    sub hta_cancel
    	completed = 2
    end sub
    
    sub hta_ok
    	completed = 3
    end sub


    UPD: убрал ненужный тэг "html" в строке "set proc = ..."
    Ответ написан
    Комментировать