• Как обойти ограничение скорости загрузки для сторонних клиентов?

    Dyaminigo
    @Dyaminigo Автор вопроса
    rPman, не-а, обычный Rest API. Только вот просниффить трафик не удаётся, когда пускаешь трафик клиента через тот же прокси фиддлера, то Я.Диск тухнет и ничего не отправляет пока не отключишь прокси.
  • Как обойти ограничение скорости загрузки для сторонних клиентов?

    Dyaminigo
    @Dyaminigo Автор вопроса
    Уважаемый rPman, извините, но вы читали вопрос и мои ответы к вашим комментариям? Ограничения распространяются и для бесплатных, и для платных тарифов. Я в некоторой мере могу понять такое решение для бесплатного места, а вот для платного как-то уже не понимаю. Да и зачем мне покупать Я.Облако, если у меня у другого облачного провайдера достаточно много места в наличии?
    Я просто хочу комфортно использовать ПОДАРЕННЫЕ 200 ГБ места на Я.Диске и через СТОРОННИЕ КЛИЕНТЫ.
    Если вы знаете способ прикинуться официальным клиентом Я.Диска, прошу рассказать о нём. Ежели нет, тогда данная ветка и советы купить что-то без ограничений просто не имеют смысла.
    p.s. браузер работает - вот и решение, пили утилиту, работающую через него (это будет дешевле чем разбирать их протокол и поддерживать его при каждом изменении)

    Но и их официальный клиент Яндекс.Диска работает, и работает через обычный Rest API. Данное решение реализовано во многих сторонних клиентах, мне хотелось бы понять, как прикинуться официальным клиентом через стороннее: использовать какой-то User-Agent, использовать особое/официальное OAUTH2-приложение для авторизации... Мне с этим хотелось бы разобраться, чтобы быстро и удобно встроить обход в уже готовые решения.
  • Как обойти ограничение скорости загрузки для сторонних клиентов?

    Dyaminigo
    @Dyaminigo Автор вопроса
    Да. Через браузер и их официальные клиенты скорость нормальная, а вот для СТОРОННИХ ограничение. Здесь одна компания, которая плотно использовала Rest API Я.Диска (сторонний клиент проще говоря) расписала ту самую проблему. А я ищу возможность обхода сего ограничения, чтобы заливать файлы с нормальной скоростью через тот же rclone, а не их оф. клиент.
  • Как обойти ограничение скорости загрузки для сторонних клиентов?

    Dyaminigo
    @Dyaminigo Автор вопроса
    rPman, это на всех тарифах и для всех. Они просто ограничили скорость загрузки файлов из СТОРОННИХ КЛИЕНТОВ, оставив без ограничений через свои официальные клиенты.
  • Как правильно подсчитать время, проведённое пользователем в онлайне (VK API)?

    Dyaminigo
    @Dyaminigo Автор вопроса
    xmoonlight, спасибо Вам большое за столь подробное объяснение. Это достаточно интересный алгоритм. Я обязательно протестирую его на собственных (реальных) данных активности и отпишу, если появятся какие-то доп. вопросы. Не могу обещать, что это получится сделать завтра, но тогда уже в январе.
    С наступающим!
  • Как правильно подсчитать время, проведённое пользователем в онлайне (VK API)?

    Dyaminigo
    @Dyaminigo Автор вопроса
    Очень подробная и ценная информация – может, лучше дополните ею свой вопрос?
    Думаю, не стоит. Этот ответ с самым большим на текущий момент кол-вом комментариев, так что если люди откроют дискуссию — сразу увидят всю информацию в хрон. порядке.
    в минуту, может быть?
    Нет, именно в секунду, потому что такие сервисы должны фиксировать любое проявление активности пользователя = изменение last_seen.
    Тяжеловато дороговато для сервиса будет бить ВК API запросами столь часто, когда отслеживаемых пользователей станет больше.
    Информацию об онлайне пользователей проще всего получать, вызывая метод users.get с fields=online,last_seen. А в user_ids можно указать до 1000 айдишников нужных нам людей. Да и есть execute, в котором способом выше можно за один запрос получить инфу о 25К пользователей. Так что за один запрос можно получить состояние онлайна большого кол-ва профилей, не напрягаясь, что и делают сервисы отслеживания.

    Также отвечаю на вопросы.
    1 и 2: если не было преднамеренно сделано что-то, для перехода в оффлайн (вызова спец. метода API, нажатия ссылки "выйти" в веб-версии сайта), то действует пятиминутный таймаут онлайна ВК, который отсчитывается от последней активности (last_seen). В это же время вызов users.get?fields=online,last_seen покажет, что last_seen, например, был две минуты назад, но online=1, который станет оффлайном через 3 минуты по таймауту. Отсюда наше любимое: висел в онлайне, а потом "заходил 5 минут назад".
    3: мы каждую секунду отслеживаем изменение last_seen. В случае обновления, записываем/суммируем его с предыдущими изменениями в этой сессии. Пока человек в онлайне (API отдаёт online=1), а когда перешёл в оффлайн, тогда считаем, что эта сессия закончена. К тому же, одновременно надо следить за клиентом, с которого человек проявляет активность. Если он неожиданно сменился (вся информация есть в API-ответе), то онлайн-сессия с предыдущего клиента считается прерванной/завершённой и начинаем следить за новой активностью и этим новым клиентом. Так делаем до бесконечности, формируя каждый раз те самые строчки информации: заходил в 10:00:00, пробыл 4 сек (ПК); заходил в 10:04:55, пробыл 7 минут (iPhone)...
    Заметил за собой, что стал часто упоминать именно первый вариант алгоритма (из вопроса), который, наверное, всё же является верным для подсчёта времени по примеру выше. Но тогда почему некоторые сервисы отдают предпочтение второму варианту (от..до) и делают ли они это также, как я описал в вопросе? Или как-то по-другому? Непонятно.
    И да, спасибо Вам, что задаёте настолько точные вопросы, которые очень помогают структурировать как свои знания по этой теме, так и формировать некоторое понимание.
  • Как правильно подсчитать время, проведённое пользователем в онлайне (VK API)?

    Dyaminigo
    @Dyaminigo Автор вопроса
    last_seen изменяется сразу, как только пользователь проявит глобальную активность в веб-версии сайта, либо сделает какое-то действие в приложении, которое автоматически (на сервере) пометит его как онлайн, либо же само приложение отправит запрос на account.setOnline.

    • Моб. приложение
      • С включённым режимом "онлайн"
        Приложение помечает пользователя как находящегося в сети по определённому разработчиком таймауту (например раз в полторы минуты), изменяя тем самым last_seen, либо при переходе по разделам прилы (профиль, друзья, сообщения и т.д.) — это поведение определяет разработчик.
        Автоматическое обновление last_seen/онлайна происходит только при совершении некоторых действий: отправка/редактирование/удаление сообщений, запрос более старых сообщений, чем уже загруженные в приложение, публикация поста на стену, скроллинг ленты новостей или её обновление. Во всех этих случаях онлайн обновляется на сервере, а не из клиента.
      • С включённым режимом "оффлайн" (такая функциональность есть в неофициальных клиентах)
        В данном режиме приложение не отправляет запрос на пометку пользователя как онлайн, да и большинство методов (например запрос списка друзей, получение списка аудио/видео и др.) сами по себе не вызывают автоматическое изменения last_seen. Но при определённых действиях (см. их выше, где я писал действия, вызывающие автоматический онлайн) last_seen изменяется и человек появляется в сети, однако приложение на это реагирует, отправляя запрос на оффлайн, что меняет last_seen в обоих случаях.
      • В фоне обновление онлайна не происходит. Только тогда, когда приложение открыто, ну и в зависимости от включённого режима.

    • Веб-версия
      last_seen изменяется при переходе между разделами сайта ("моя страница", "новости", "сообщения" и т.д.), при любом действии в разделе "сообщения" (печать сообщения, редактирование/удаление, скроллинг по списку и пр.), при публикации записи на стене, при навигации по страницам пользователей/групп и другим страницам сайта.
      Не меняется, если, например, человек не обновляет страницу (кроме раздела сообщений), если лайкает запись, если просматривает посты любого пользователя/группы (last_seen изменится только при переходе на страницу).
      Проще говоря, если страница открыта, то онлайн обновится только при её загрузке, но никак во время нахождения на ней. Шевеление мышки не изменит last_seen, а вот, например, комментирование записи да.


    В общем и целом, онлайн вызывает только специальный для этого метод и только некоторые другие, но большинство нет. В браузере можно загрузить страницу и хоть до конца жизни держать её открытой, матать мышкой, но last_seen останется прежним, пока, например, нам не захочется репостнуть какую-то запись, либо перейти на другую страницу. Никаких задержек изменения last_seen нет. Он обновляется только тогда, когда совершается какое-то действие, ну или по таймауту в клиентах, если разработчиком так задумано, чтобы держать профиль в сети.
    Те сервисы, которые отслеживают онлайн, проверяют last_seen один или несколько раз в секунду. ВК позволяет отправлять 3 запроса в секунду, так что это хороший вариант, чтобы мгновенно отслеживать изменение времени активности профиля.
    Возвращаясь к вопросу правильного подсчёта общего времени онлайна пользователя, пока online=1 (не закончился пятиминутный таймаут ВК) или не был вызван метод перехода в оффлайн.
    Мне хотелось бы формировать информацию об онлайне также, как те самые сервисы, например:
    Заходил в 10:00:00, пробыл 35 секунд (ПК);
    Заходил в 10:15:05, пробыл 4 минуты и 36 секунд (Android)
    ...
    Онлайн с 10:05:00 до 10:05:44 (ПК)
    Онлайн с 10:44:55 до 10:53:02 (iPhone)
  • Как правильно подсчитать время, проведённое пользователем в онлайне (VK API)?

    Dyaminigo
    @Dyaminigo Автор вопроса
    Интересная формула «средне-двойного таймаута», но при её тестировании получил не совсем те результаты, какие, например, показывали множество сервисов отслеживания онлайна.

    К примеру, человек проявил активность в 10:00:02, 10:00:07, 10:00:45 через браузер или приложение, а далее либо нажал ссылку «выйти», либо приложение отправило запрос на account.setOffline, покинув онлайн. Исходя из примера, получается, что «общее время активности» 3 секунды, а неактивности/простоя 43.
    Делаем вычисления с помощью Вашей формулы:
    43 / 2 = 21.5 – среднее время неактивности
    21.5 * 2 = 43
    3 (общее время активности) - 43 = -40

    Вряд ли отрицательное время онлайна – это то, что нужно. Да и те сервисы, исходя из моего примера, показывают то 3, то 43 секунды общей активности. Возможно, что я неправильно понял Вашу формулу и ответ, в таком случае прошу объяснить на примере. Также уточните, пожалуйста, как Вы пришли к этой формуле или где нашли её, а то ранее такой не видел.
    Я уже начинаю склоняться к правильности первого варианта алгоритма, описанного в вопросе. Просто подсчитывать кол-во изменений last_seen за то время, пока online=1 и с одного и того же клиента. Но терзают сомнения, что второй может быть вернее.
  • Как вести счётчик успешных операций, используя Parallel.ForEach?

    Dyaminigo
    @Dyaminigo Автор вопроса
    Петр, к сожалению, решить проблему так и не удалось. Как я убедился, файлы обрабатываются по одному разу, но при этом счётчик имеет значение большее, чем было успешных обработок.
    Возможно, что метод File.Move (он является одним из методов, участвующих в процессе обработки) как-то долговато блокирует поток, что он или ошибочно, или как-то ещё инкрементирует счётчик несколько раз для одной параллельной операции.
    Как бы то ни было, Ваше решение подходит для решения аналогичных, менее проблемных, задач.
  • Как вести счётчик успешных операций, используя Parallel.ForEach?

    Dyaminigo
    @Dyaminigo Автор вопроса
    Петр, с параллельными циклами я уже ни в чём не уверен. Вообще предполагалось одновременно обрабатывать несколько РАЗНЫХ файлов из списка, пока все не обработаются, при этом каждый отдельный файл должен быть обработан всего 1 раз. Судя по всему, некоторые файлы действительно обрабатываются повторно, но я не понимаю как. Попробую проверить это предположение, о результатах отпишусь в другом комменте.
  • Как вести счётчик успешных операций, используя Parallel.ForEach?

    Dyaminigo
    @Dyaminigo Автор вопроса
    Не работает. Файлов 230, а значение счётчика: 365, 359, 344, 360...
    Потокобезопасные переменные или коллекции всегда имеют большее значение или кол-во элементов, чем надо. Пробовал использовать ConcurrentBag, ConcurrentDictionary, BlockingCollection.
  • Как скачать музыку из vk.com?

    Dyaminigo
    @Dyaminigo
    Username0, использую его достаточно долгое время. Ничего подозрительного обнаружено не было.
    P.S. Если ответ помог Вам, отметьте его решением.
  • Как в VK API принудительно вызвать капчу?

    Dyaminigo
    @Dyaminigo
    Вы уверены, что данный метод работает/активен/существует на текущий момент?
  • Vk api. Как узнать в каких группах определенный пользователь - админ?

    Dyaminigo
    @Dyaminigo
    DEF0RJ, на сколько знаю, ВК не предоставляет методов, способных получить подобную информацию.
  • Vk.api как получить список людей с которыми я общался?

    Dyaminigo
    @Dyaminigo
    crescent, это не так просто, т.к. Messages.GetDialogs возвращает только последние сообщения в каждом из диалогов, без какого-либо статичного указания ID собеседника. Тут можно просто его узнать, если последнее сообщение в диалоге было входящим, т.е. от собеседника, его ID будет находиться в объекте "message", поле "user_id".
    А чтобы получить все сообщения и ID их отправителей, надо совершить множество запросов на Messages.Get, с каждым разом увеличивая offset. Ну и в программе уже отбирать 1 уникальный ID. Для большого кол-ва одновременных запросов лучше использовать Execute.
    P.S. Возможно кто-то сможет подсказать решение получше.
  • Возможен ли вызов secure.sendNotification без access_token?

    Dyaminigo
    @Dyaminigo
    Александр Фарбер, Вы пробовали запросить сервисный ключ на сервере и использовать его?
    Если пробовали и не получилось, рекомендую обратиться в техническую поддержку ВК, описав им все предпринимаемые Вами действия.
  • Возможен ли вызов secure.sendNotification без access_token?

    Dyaminigo
    @Dyaminigo
    Александр Фарбер, Вы использовали сервисный ключ из настроек или запросили старым способом с сервера? Если первый вариант, тогда запросите на сервере ключ и попробуйте вызвать метод с ним. Если второй вариант, то сделайте наоборот - используйте ключ из настроек.
    И не забывайте про защищённый ключ в каждом запросе.
    Помимо стандартных параметров, указанных в описании методов, к запросу необходимо добавлять параметр client_secret, содержащий значение из поля «Защищенный ключ» в настройках приложения.
  • Возможен ли вызов secure.sendNotification без access_token?

    Dyaminigo
    @Dyaminigo
    Александр Фарбер, к сожалению, нет. Увеличить это количество нельзя. К тому же тестовый режим при работе с Secure-методами не поддерживается.
    Ограничение одного успешного запроса/уведомления за час распространяется на каждого конкретного пользователя, а не на количество вызовов метода в целом. Как я понял, Вы можете хоть 100 раз отправить уведомление, только при условии, что с каждым новым запросом будет указан ID пользователя, который за последний час и сутки не получал больше одного и трёх уведомлений от Вашего приложения соответственно.
    Обратите внимание, нельзя отправлять пользователю более 1 уведомления в час (3 в сутки). Кроме того, нельзя отправить одному пользователю два уведомления с одинаковым текстом подряд.
  • Как узнать что блокирует интернет?

    Dyaminigo
    @Dyaminigo
    fvladm, как вариант, можно попробовать восстановить Kinder Gate и удалить его заново, используя богатый функционал Revo Uninstaller.
    Пошаговая инструкция:
    • Скачайте и установите Revo Uninstaller
    • Вызовите контекстное меню на установщике Kinder Gate и выберите "Установить с помощью Revo Uninstaller", чтобы начать установку программы с отслеживанием всех вносимых изменений в системе
    • Установите и совершите первоначальную настройку Kinder Gate, после чего завершите отслеживание Revo Uninstaller, виджет которого будет маячить где-то на экране
    • Откройте Revo Uninstaller и, найдя Kinder Gate в списке отслеженных программ, запустите процесс удаления. По ходу выбирайте и удаляйте все ключи реестра/файлы программы, которые будут обнаружены

    Это весьма мощная утилита, умеющая качественно находить и удалять все или почти все следы программы в системе.
    Надеюсь, что выше приведённая инструкция Вам поможет, ежели нет, предлагаю кардинальный и очень эффективный вариант - переустановка/сброс OS до первоначального состояния.