Jump to content
View in the app

A better way to browse. Learn more.

IPBMafia.ru - поддержка Invision Community, релизы, темы, плагины и приложения

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MrShandy

Пользователи
  • Регистрация

  • В сети

Everything posted by MrShandy

  1. Какое API такое и решение) Ну если они не смогли даже нормально задокументировать всё, как я должен по другому действовать? Вариант рабочий, проблем не должен создать. Если найду решение лучше - обязательно напишу здесь, но пока будет так
  2. Можно закрывать тему, решил 🙂 Просто заменил строку $fileObject = \IPS\File::create( 'downloads_Files', $name, $_POST['files'][ $name ] ); на $fileObject = \IPS\File::create( 'downloads_Files', $name, base64_decode($_POST['files'][ $name ]) ); На стороне клиента (в моём случае приложения на Python) так: "files[archive.zip]": base64.b64encode(file_content.read()).decode('utf-8')
  3. Ну а как я должен отправить не текстовую информацию?) Не, можно впринципе сделать ход конем и отправлять base64, а на сервере это обратно. Вопрос в адекватности таких действий
  4. Окей, это работает Сейчас проверю с отправкой файла в байтах, иначе как условный архив туда закинуть @Desti, проверил, текст отправляется без проблем. Байты нет, ошибка нет файлов Текст: Для байтов: Забавно на самом деле
  5. Только при этом ниже имеем: foreach ( array_keys( Request::i()->files ) as $name ) { $fileObject = \IPS\File::create( 'downloads_Files', $name, $_POST['files'][ $name ] ); Db::i()->insert( 'downloads_files_records', array( 'record_file_id' => $file->id, 'record_type' => 'upload', 'record_location' => (string) $fileObject, 'record_realname' => $fileObject->originalFilename, 'record_size' => $fileObject->filesize(), 'record_time' => time(), ) ); } То есть файлы должны быть и в $_POST? Я не знаю php, но $_POST это же data, а не параметры, правильно? Ну и опять же, в параметры невозможно передать dict. Это как минимум не логично Traceback (most recent call last): File "C:\Users\MrSha\Documents\Projects\ICFileUploader\main.py", line 57, in <module> loop.run_until_complete(main()) File "C:\Users\MrSha\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 649, in run_until_complete return future.result() File "C:\Users\MrSha\Documents\Projects\ICFileUploader\main.py", line 52, in main await upload_file(data_files) File "C:\Users\MrSha\Documents\Projects\ICFileUploader\main.py", line 27, in upload_file async with session.post(url, params=params, data=data_files) as response: File "C:\Users\MrSha\.virtualenvs\ICFileUploader-DZz49JbJ\lib\site-packages\aiohttp\client.py", line 1141, in __aenter__ self._resp = await self._coro File "C:\Users\MrSha\.virtualenvs\ICFileUploader-DZz49JbJ\lib\site-packages\aiohttp\client.py", line 508, in _request req = self._request_class( File "C:\Users\MrSha\.virtualenvs\ICFileUploader-DZz49JbJ\lib\site-packages\aiohttp\client_reqrep.py", line 283, in __init__ url2 = url.with_query(params) File "C:\Users\MrSha\.virtualenvs\ICFileUploader-DZz49JbJ\lib\site-packages\yarl\_url.py", line 1007, in with_query new_query = self._get_str_query(*args, **kwargs) or "" File "C:\Users\MrSha\.virtualenvs\ICFileUploader-DZz49JbJ\lib\site-packages\yarl\_url.py", line 968, in _get_str_query query = "&".join(self._query_seq_pairs(quoter, query.items())) File "C:\Users\MrSha\.virtualenvs\ICFileUploader-DZz49JbJ\lib\site-packages\yarl\_url.py", line 931, in _query_seq_pairs yield quoter(key) + "=" + quoter(cls._query_var(val)) File "C:\Users\MrSha\.virtualenvs\ICFileUploader-DZz49JbJ\lib\site-packages\yarl\_url.py", line 946, in _query_var raise TypeError( TypeError: Invalid variable type: value should be str, int or float, got {'archive.zip': [b'PK\x03\x04\x14\x00\x00\x00\x08\x00\x1d`\xf3V2\xc6\np\xbd\x01\x00\x00*\x03\x00\x00\x07\x00\x00\x00main.pymRM\x8f\xd30\x10\xbdG\xca\x7f\x18\x89\x83\x1b)\x9b\xb44\x9be#\xf5\xb0\x12 q\xe0\x06\x12\x12\xe2\xe0\xd8\x93\xc6\xda\xc46\xb6\x03t\x11\xff\x1d\xdbqKw\x85\xe5\x83g<\xef\xbd\xf9\x12\xb3V\xc6AO-\xb6M\x9e\xe5Yr\x18\xfc\xbe\xa0u6\xb8\x163\xc1\x01\xc8\xe8\x9c\xb6]][f\xa8\x9e\x91\x8dT\nV\x99\xa5\xa6Z\xd4\\\xfd\x94\x93\xa2\xdc\xd6\x83\x98\xd0\x92<s\xea\x11e\xc0\xe1\xb6i\x18\xc5v\x8b\x03\xbd\xc3\xfb\xbb}\xdb\xf48 \xbf\x7f\xd3\xb3]?\xec}\xac\xa6\x86\xce\xd6\x07\xff\xce3\xf0\x870\xea\xf0\xa8\xcc\x89t\xb0{\xbd/\x01^\xc1\x87\xb7 \x97\xb9G\x03j\x007"\x9cc\xa2\x11T\xc1\x8ej\x998\xf4\xfe\xcf\xa0\xff\xe5 d"\xa4\x8b\x1b\x95\xf1t\xcdm\xfb\x7f\xba\x19\xa3\x15\x91B\x1e/\xac\x89\xc0\t7\xa1\xc7\x13j\xd8(~`\xf5$4\x89LQZ\xd2\xf9\x1c\xc9\xd1wHh\'\x94\x0c\xf1\x9fFa\xc1_*!A#\xa2\xba\x02_!\x12\xc7\xda\xc4\xee\xdc\x8fp\x9e\tw\xa04\xca\xcd\x8bd\x88\xe9IqaeJ:\x94ne\xf8\x93g\xfe\x8eH9\x9a\xebF\x7f\xb9y\x88\x9d\x11O4%\xbc\xaeB\xd5\xb7\rJ\xa68n\xe2 \xabd\x14E\xc5q}\x95\x89\xe2\xb3Es\xf3p\xf4R\xa1\xdc\x8f\xa7`G\xb3\xdeU[\x12u\xf3\xcc\xa0\xd5JZ\x84\xc3e\xb5*\xad\xac\xdb\xf8\xe5*c\xbe\xf6\xb0n\xc1\xd7T\xfc\xb7\x128u4y\x0b\xbf\x99\x03\x9cY*\xf5\xd8\xad\xea\xda\x08\xe96\xe4}(x\xd1a\x03\xfd\xd4\xed\xc2\x18Z;,\xd3t\xaa\x88\x87\xe2d\xf1\x05\x80z\x04\x07\xa7\x12j\x9d\t\xbc3F\x99\x8e\x94\xff\x94\x1c\xferE\xa8\xe0/PK\x01\x02\x1f\x00\x14\x00\x00\x00\x08\x00\x1d`\xf3V2\xc6\np\xbd\x01\x00\x00*\x03\x00\x00\x07\x00$\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00main.py\n\x00 \x00\x00\x00\x00\x00\x01\x00\x18\x00\x9d\x82\xe6\x88\x1f\xba\xd9\x01\x9d\x82\xe6\x88\x1f\xba\xd9\x01\x07Rx\xa3\x1e\xba\xd9\x01PK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00Y\x00\x00\x00\xe2\x01\x00\x00\x00\x00']} of type <class 'dict'>
  6. Ну допустим так, но надо как то туда передать список? Если это вообще возможно передать в параметрах. Мне бы просто понять как отправлять, хотя бы через postman, а там уже разберусь как на питоне написать API у них убогий какой то, можно было в разы лучше сделать
  7. Ну я видел это, передаю список, но результат ошибка. Как мне запрос то делать надо?
  8. Params: {'category': 5, 'author': 1, 'title': 'archive.zip', 'description': '<p>This is an archive file.</p>', 'hidden': 1, 'files': ['archive.zip']} Data: {'archive.zip': [b'PK\x03\x04\x14\x00\x00\x00\x08\x00\x1d`\xf3V2\xc6\np\xbd\x01\x00\x00*\x03\x00\x00\x07\x00\x00\x00main.pymRM\x8f\xd30\x10\xbdG\xca\x7f\x18\x89\x83\x1b)\x9b\xb44\x9be#\xf5\xb0\x12 q\xe0\x06\x12\x12\xe2\xe0\xd8\x93\xc6\xda\xc46\xb6\x03t\x11\xff\x1d\xdbqKw\x85\xe5\x83g<\xef\xbd\xf9\x12\xb3V\xc6AO-\xb6M\x9e\xe5Yr\x18\xfc\xbe\xa0u6\xb8\x163\xc1\x01\xc8\xe8\x9c\xb6]][f\xa8\x9e\x91\x8dT\nV\x99\xa5\xa6Z\xd4\\\xfd\x94\x93\xa2\xdc\xd6\x83\x98\xd0\x92<s\xea\x11e\xc0\xe1\xb6i\x18\xc5v\x8b\x03\xbd\xc3\xfb\xbb}\xdb\xf48 \xbf\x7f\xd3\xb3]?\xec}\xac\xa6\x86\xce\xd6\x07\xff\xce3\xf0\x870\xea\xf0\xa8\xcc\x89t\xb0{\xbd/\x01^\xc1\x87\xb7 \x97\xb9G\x03j\x007"\x9cc\xa2\x11T\xc1\x8ej\x998\xf4\xfe\xcf\xa0\xff\xe5 d"\xa4\x8b\x1b\x95\xf1t\xcdm\xfb\x7f\xba\x19\xa3\x15\x91B\x1e/\xac\x89\xc0\t7\xa1\xc7\x13j\xd8(~`\xf5$4\x89LQZ\xd2\xf9\x1c\xc9\xd1wHh\'\x94\x0c\xf1\x9fFa\xc1_*!A#\xa2\xba\x02_!\x12\xc7\xda\xc4\xee\xdc\x8fp\x9e\tw\xa04\xca\xcd\x8bd\x88\xe9IqaeJ:\x94ne\xf8\x93g\xfe\x8eH9\x9a\xebF\x7f\xb9y\x88\x9d\x11O4%\xbc\xaeB\xd5\xb7\rJ\xa68n\xe2 \xabd\x14E\xc5q}\x95\x89\xe2\xb3Es\xf3p\xf4R\xa1\xdc\x8f\xa7`G\xb3\xdeU[\x12u\xf3\xcc\xa0\xd5JZ\x84\xc3e\xb5*\xad\xac\xdb\xf8\xe5*c\xbe\xf6\xb0n\xc1\xd7T\xfc\xb7\x128u4y\x0b\xbf\x99\x03\x9cY*\xf5\xd8\xad\xea\xda\x08\xe96\xe4}(x\xd1a\x03\xfd\xd4\xed\xc2\x18Z;,\xd3t\xaa\x88\x87\xe2d\xf1\x05\x80z\x04\x07\xa7\x12j\x9d\t\xbc3F\x99\x8e\x94\xff\x94\x1c\xferE\xa8\xe0/PK\x01\x02\x1f\x00\x14\x00\x00\x00\x08\x00\x1d`\xf3V2\xc6\np\xbd\x01\x00\x00*\x03\x00\x00\x07\x00$\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00main.py\n\x00 \x00\x00\x00\x00\x00\x01\x00\x18\x00\x9d\x82\xe6\x88\x1f\xba\xd9\x01\x9d\x82\xe6\x88\x1f\xba\xd9\x01\x07Rx\xa3\x1e\xba\xd9\x01PK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00Y\x00\x00\x00\xe2\x01\x00\x00\x00\x00']}
  9. Ну заголовками управляет aiohttp, моё дело рулить данными Вот какие он выставляет Headers: <CIMultiDictProxy('Host': 'scrapmechanic.ru', 'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'User-Agent': 'Python/3.10 aiohttp/3.8.4', 'Authorization': 'Basic токен', 'Content-Length': '1485', 'Content-Type': 'application/x-www-form-urlencoded')> Насильно выставить multipart/form-data не дало результата Headers: <CIMultiDictProxy('Host': 'scrapmechanic.ru', 'Accept': 'application/json', 'Content-Type': 'multipart/form-data', 'Accept-Encoding': 'gzip, deflate', 'User-Agent': 'Python/3.10 aiohttp/3.8.4', 'Authorization': 'Basic токен', 'Content-Length': '1485')> Response JSON: {'errorCode': '1L296/B', 'errorMessage': 'NO_FILES'}
  10. Не совсем понимаю как мне загружать файлы по REST API. Написал скрипт на python для загрузки, но как бы я не пробовал, ничего не получается. Если кто то делал, можете подсказать как именно отправляли файлы? Вот скрипт, может я в чем то ошибаюсь? Хотя мы с напарником многое перепробовали уже и пока никаких результатов. Вот часть кода API, ориентировался на него когда писал скрипт. Ошибку постоянно получаю эту: Failed to upload file. Error: { "errorCode": "1L296\/B", "errorMessage": "NO_FILES" } Если вывести \IPS\Request::i()->files вместо 'NO_FILES' выводится последний элемент массива files. Пока не понял логику этого
  11. Во дела, интересно
  12. Нет, ну понятно, что протокол передачи есть, а как отдавать этот контент? Сам фтп на фронте по понятным причинам работать не будет, веб сервер на хранилище делать? Правда такое раньше было? Очень интересно узнать как работало
  13. Ну, все перечислять долго. Ну а если в общем, то изменение client_max_body_size и установка времени кэширования Проблема была в том, что когда то пытался перейти с apache на php-fpm, но затея провалилась и я забыл убрать локацию /api из конфига Но главное проблема решена, так что всё гуд
  14. Решено! Была проблема в nginx, за которым работает Apache Nginx отдельно обрабатывал локацию api, поэтому возникала проблема
  15. Возникла потребность во внешнем инструменте, решил взаимодействовать через API, но обнаружил проблему. При попытке сделать GET запрос api/core/hello получаю это: { "errorCode": "3S290/3", "errorMessage": "INVALID_APP" } Не знаю когда и почему возникла ошибка, но раньше API работало без ошибок. Любой запрос возвращает такую ошибку. Ключ API действительный. На сайте https://invisioncommunity.com/developers/rest-api написано: 3S290/3 INVALID_APP The endpoint the request was sent to does not exist (the first level contains an invalid character, only alphanumerics are acceptable). Но по идее у меня все правильно настроено, в т.ч. в .htaccess. Эндпоинт правильный
  16. А как это работать будет?
  17. MrShandy replied to Zero108's тема in Interface
    В настройках плагина ничего интересного нет В настройках званий или репутации тоже ничего интересного нет. Вообще судя по всему оно выводит уровень под текущим аккаунтом. Для гостя у всех будет 1 уровень
  18. MrShandy replied to Zero108's тема in Interface
    Есть проблема, у всех почему то отображается одинаковый уровень: С чем это может быть связано? И как починить
  19. Вопрос. Почему просто баннер с ссылкой, а не РСЯ или AdSense?
  20. Ну а если как то шифровать на сервере и расшифровывать на клиенте? Да, скачать будет можно, но уже сильно сложнее
  21. Есть проблема с дискордом Вот код класса этого элемента: .cShareLink_discord .fa-discord { display: block; width: 1em; height: 1em; background-image: url(data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 198.17'%3E%3Cpath d='M216.86 16.6C200.29 8.85 182.57 3.21 164.05 0c-2.28 4.11-4.93 9.65-6.77 14.05-19.69-2.96-39.2-2.96-58.53 0C96.92 9.65 94.2 4.12 91.9 0 73.36 3.21 55.62 8.86 39.04 16.64 5.62 67.15-3.44 116.4 1.09 164.96c22.17 16.56 43.65 26.61 64.78 33.19 5.22-7.18 9.87-14.81 13.87-22.85-7.63-2.9-14.94-6.48-21.85-10.63 1.83-1.36 3.62-2.78 5.36-4.24 42.12 19.7 87.89 19.7 129.51 0 1.75 1.46 3.54 2.88 5.36 4.24-6.93 4.17-14.26 7.75-21.89 10.65 4.01 8.02 8.64 15.67 13.87 22.85 21.14-6.58 42.65-16.64 64.82-33.21 5.32-56.29-9.08-105.09-38.06-148.36ZM85.47 135.09c-12.64 0-23.01-11.8-23.01-26.18s10.15-26.2 23.01-26.2 23.24 11.8 23.01 26.2c.02 14.38-10.15 26.18-23.01 26.18Zm85.05 0c-12.64 0-23.01-11.8-23.01-26.18s10.15-26.2 23.01-26.2 23.24 11.8 23.01 26.2c0 14.38-10.15 26.18-23.01 26.18Z' fill='%23fff'/%3E%3C/svg%3E); background-size: contain; background-position: 50%; background-repeat: no-repeat; А в .fa-discord:before { content: '\f392'; } Но этот если отключить бэкграунд у .cShareLink_discord .fa-discord отображается так: Единственным решением вижу правку файла FA 6, но мне кажется это неправильно. Есть какие нибудь еще варианты решения? Тему использую Fluent Design Theme Edition 4.4.0, от того же автора. Там заявлена совместимость с этим приложением, то есть по логике проблем быть не должно.
  22. Видимо я что то у себя на форуме наделал, что у меня вот так отображается)
  23. А в итоге заявление в полицию и регистратору было написано?
  24. Цель: Сделать кнопку, по нажатии на которую будет показываться форма обратной связи с уже установленными значениями темы и текстом. В идеале чтобы тему вообще нельзя было изменить пользователю. Саму кнопку сделать для меня не проблема, шаблоны править я умею. А вот с PHP есть проблемки, поэтому не знаю как это можно сделать, и возможно ли впринципе. Думаю, в моём случае нужен плагин, но я не нашел подходящий Заранее спасибо за помощь 🙂
  25. Может уже писали, но я не нашел Как быть с этим?

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.