Ответы пользователя по тегу ВКонтакте
  • Как создать список всех id, с которыми у меня диалог в vk через группу?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Метод messages.getDialogs() поможет.
    Вызывать с ключом доступа Сообщества с правами messages.
    Ответ написан
    Комментировать
  • Откуда столько посетителей у нового паблика ВК?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Варианты:
    • серые сервисы накрутки;
    • реклама;
    • крупное оффлайн мероприятие;
    • конкурс;
    Ответ написан
    Комментировать
  • Не отправляет сообщение пользователю через апи?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Вы вместо сообщения отправляете массаж : )

    {"key":"massage","value":"11111"}
    Ответ написан
    1 комментарий
  • Можно ли занести несколько значений в переменную в данном php-скрипте?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    wall.post() публикует единственную запись.

    Для промышленных масштабов спама ускорения есть вариант с методом execute(), в который можно обернуть до 25 вызовов АПИ ВКонтакте.

    Т.е. вы на сервере собираете в строку некий код, похожий на JavaScript, что-то типа:
    var params = {
      "message": "Текст поста",
      "from_group": 0,
    };
    var out = { "result": [] };
    
    params.owner_id = 10101; // первая группа
    params.guid = 'abrakadabra';
    out.result.push( API.wall.post(data));
    
    params.owner_id = 20202; // вторая группа
    params.guid = 'drugayaabrakadabra';
    out.result.push( API.wall.post(data));
    // ...
    params.owner_id = 2500025; // 25-я группа
    params.guid = 'uniqueabrakadabra';
    out.result.push( API.wall.post(data));
    
    return out;


    И этот код как текст отправляете параметром code в методе execute()
    Ответ написан
    2 комментария
  • VK API: php-скрипт возвращает ошибку. В чем проблема?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    "message" надо с маленькой буквы.

    У вас сейчас "Message" => $text,
    Ответ написан
    Комментировать
  • Как создать виджет сообщества VK?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Простой способ
    Есть готовое бесплатное приложение для Сообществ "LiveWidget" – там от вас требуется только код самого виджета составить. В вашем сообществе меню три точки - Управление сообществом - Приложения, листаете список предлагаемых приложений до LiveWidget, жмёте «Добавить»:
    скрин
    5af95de14a7d2991085711.png
    Джедайский способ
    В документации по созданию виджета для сообщества всё подробно описано. Вкратце:
    1. создать приложение – Встраиваемое приложение – Приложение сообщества
    2. адресом iframe укажите ваш сервер и папку, где лежит, например, такой HTML
    3. зайдите в ваше Сообщество – меню Управление сообществом – Приложения – выберите там ваше свежесозданное приложение
    4. дайте ему разрешение на добавление виджетов
    5. вставьте код вашего виджета и сделайте его предпросмотр – если в коде виджета нет ошибок, во всплывающем окошке покажут, как он выглядит и предложат установить его в сообщество.
    Скрин приложения
    5af9668c9208d318099967.png
    Код приложения
    <!DOCTYPE html>
    
    <html lang="">
    <head>
        <meta charset="utf-8">
    
        <title>Widgeteer</title>
        <meta name="description" content="Создание виджета для сообщества ВКонтакте">
        <meta name="keywords" content="Sergei Sokolov,ВК,виджет,конструктор">
        <meta name="robots" content="noindex,nofollow">
        
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
    </head>
    
    <body>
    	<div class="container">
    		<h3>Виджет для сообщества ВК</h3>
    		
    		<div id="b-alerts"></div>
    		
    		<div class="form-group">
    			<button id="btn-permission" class="btn btn-primary" type="button">Дать разрешение</button>
    		</div>
    
    		<div class="form-group">
    			<label for="in-type">Тип виджета:</label>
    			<select class="form-control" id="in-type">
    				<option value="text">text</option>
    				<option value="list">list</option>
    				<option value="table">table</option>
    				<option value="tiles">tiles</option>
    				<option value="compact_list">compact_list</option>
    				<option value="cover_list">cover_list</option>
    				<option value="match">match</option>
    				<option value="matches">matches</option>
    			</select>
    		</div>
    		
    		<div class="form-group">
    			<label for="in-code">Код виджета:</label>
    			<textarea rows="7" class="form-control" id="in-code">return {
    "title": "Цитата",
    "text": "Текст цитаты"
    };</textarea>
    		</div>
    
    		<button id="btn-preview" class="btn btn-primary" type="button">Предпросмотр виджета</button>
    				
    	</div><!-- /.container -->
    	
    	
    	
    
    	<!-- Bootstrap JavaScript -->
      <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    	<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    	<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>
    	<!-- /Bootstrap JavaScript -->
    	
    	<!-- main script -->
    	<script>
    		function onReady() {
    
    			// Слушать события предпросмотра виджета 
    			VK.addCallback('onAppWidgetPreviewFail', function(e){
    				console.error('onAppWidgetPreviewFail', e);
    				showAlert('warning', 'onAppWidgetPreviewFail');
    			});
    			
    			VK.addCallback('onAppWidgetPreviewCancel', function(e){
    				console.error('onAppWidgetPreviewCancel', e);
    				showAlert('info', 'onAppWidgetPreviewCancel');
    			});
    			
    			VK.addCallback('onAppWidgetPreviewSuccess', function(e){
    				console.log('onAppWidgetPreviewSuccess', e);
    				showAlert('success', 'onAppWidgetPreviewSuccess');
    			});
    			
    			// События нажатия на кнопки
    			$('#btn-permission').on('click', function(){
    				console.log('showGroupSettings');
    				VK.callMethod("showGroupSettingsBox", 64);
    			});
    			
    			$('#btn-preview').on('click', function(){
    				var type = $('#in-type').val(),
    				  code = $('#in-code').val()
    			  ;
    				
    				console.log('showAppWidgetPreviewBox', {type: type, code:code});
    				VK.callMethod("showAppWidgetPreviewBox", type, code);
    			});
    
    		}
    
    
    		function showAlert(className, text) {
    			var html = [
    				'<div class="alert alert-dismissible alert-'+className+'" role="alert">',
    					text,
    				'</div>',
    			].join('\n');
    			$('#b-alerts').append(html);
    		}
    	</script>
    	<!-- /main script -->
    	
    
    	<!-- VK scripts -->
    	<script src="https://vk.com/js/api/xd_connection.js?2"  type="text/javascript"></script>
    	
    	<script type="text/javascript">
    	  VK.init(function() {
    	     // API initialization succeeded
    	     onReady();
           
    	  }, function() {
    	     // API initialization failed
    	     // Can reload page here
    	     console.error('VK init error', arguments);
    		}, '5.74');
    	</script>
    	<!-- /VK scripts -->
    
    </body>
    </html>


    Какие бывают типы виджетов см. на странице документации по объекту appWidget.

    Какой конкретно шаг в этом сценарии у вас не получился?
    Ответ написан
  • Что не так с php-скриптом для VK API?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Разбирайте ответ от ВК, вполне возможно, что там содержится описание ошибки.

    Вместо
    printf('Success');
    exit;


    надо что-то типа
    $decoded = json_decode($query);
    if(!$decoded) {
      printf("ВК вернул невообразимую фигню: %s", $query);
    }
    else if( $decoded->error) {
      printf("Ошибка %d: %s\n", $decoded->error->error_code, $decoded->error->error_msg);
    } else if( $decoded->response) {
      printf("Пост опубликован с id %s\n", $decoded->response);
    }
    exit();


    Upd. возможно, дело в размещаемом сообщении и сurl. Попробуйте вместо CURLOPT_POSTFIELDS => array( ...
    сделать так:
    CURLOPT_POSTFIELDS     =>  http_build_query( array( ... ))
    Ответ написан
    Комментировать
  • Почему ВК api возвращает ошибку Error 5: User authorization failed: no access_token passed?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Стоит ознакомиться с API ВКонтакте по их статье.

    Ваше сообщение об ошибке однозначно указывает на её причину: User authorization failed: no access_token passed. – не авторизовать пользователя, выполняющего запрос по причине отсутствия access_token'а (ключа доступа).

    Для выполнения friends.get() требуется ключ ("access_token") либо сервисный – из настроек созданного вами Приложения ВК; либо пользователя – полученный в результате диалога авторизации пользователя.

    Также обязательно стало указывать используемую версию API, параметр v. Сейчас актуальная версия 5.74

    Чтобы просто попробовать, создайте приложение типа standalone и скопируйте из его Настроек значение Сервисного ключа:
    скрин
    5af6a32ecd7c0965325530.png

    В итоге ваш запрос будет выглядеть примерно так:
    https://api.vk.com/method/friends.get?user_id=babegone&v=5.74&access_token=supersecretsupersecret
    Ответ написан
    6 комментариев
  • Почему ВК api возвращает ошибку Error 121: invalid hash?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Проверьте, что вы правильно следуете инструкции по загрузке фотографий на стену ВК.
    Ответ написан
  • Как сделать другой post_type?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Фильтрация по типу доступна в методе не wall.getById(), а wall.get(): надо добавить параметр filter=suggests

    Такой вызов доступен только с передачей токена, полученного Создателем, Админом (и может, Редактором) группы.
    Ответ написан
    Комментировать
  • Как по задумке работает авторизация в vk.com API?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    1. пользователь устанавливает себе приложение
    2. ВК задаёт пользователю вопрос: приложение k...mobile хочет доступ к вашим данным – имени, телефону, номеру банковского счёта, паролю от онлайн банка и т.п. – перечисляет запрашиваемые права
    3. пользователь соглашается или отказывается
    4. если согласился, в приложении оказывается именно его access_token, с которым доступ есть только к данным пользователя (и чужим публичным данным)


    Это считается безопасным.

    Если у ВК появятся подозрения в зловредной деятельности приложения, они его "отключают" – все выданные пользователями этому приложению разрешения разом аннулируются, оно не сможет более выполнять запросы к API ВК.
    Ответ написан
    8 комментариев
  • Как по ссылке ВКонтакте определить, что это за объект?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Соберите ещё вариантов ссылок, и появится догадка! ; )
    Из документации к messages.send():
    photo — фотография;
    video — видеозапись;
    audio — аудиозапись;
    doc — документ;
    wall — запись на стене;
    market — товар.


    Upd. можно через регулярку:
    function parseVkLink(link) {
      var re = new RegExp('(photo|video|audio|doc|wall|market)(\\d+)_(\\d+)');
      var matches = link.match(re);
      if(matches) {
        return {
          type: matches[1],
          ownerId: matches[2],
          objectId: matches[3],
        };
      } else {
        return false;
      }
    }
    
    var test = 'https://vk.com/durov?z=photo1_456315566%2Falbum1_00%2Frev';
    JSON.stringify( parseVkLink(test) ) // {"type":"photo","ownerId":"1","objectId":"456315566"}
    Ответ написан
    7 комментариев
  • Как ускорить программу на python (vkapi)?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Где у вас узкое место: в получении постов по одному, не более 3 в секунду? Используйте метод execute() – там можно собирать запросы в пачки до 25 запросов к API ВК. Итого 75 в секунду.

    Если вы делаете запросы с токенами не одного, а нескольких аккаунтов, то можно параллелить запросы например, с Octopus HTTP
    Ответ написан
    Комментировать
  • Как посредством API ВКонтакте получить больше 5000 друзей методом friends.get()?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Сделайте в цикле. С каждым разом увеличивайте offset на 5000 пока он не окажется больше возвращённого в поле count полного числа друзей. Не забывайте про лимит в 3 запроса в секунду.

    Можно ещё заморочиться и запихать весь код в execute(), тогда из PHP последует единственный запрос, а цикл прокрутится на сторон ВК.
    Ответ написан
    3 комментария
  • Как подтянуть фото методом wall.get?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Посмотрите внимательно возвращаемый wall.get() JSON: фотографии там лежат в массиве attachments.

    Т.е. надо ещё одним циклом в каждом посте перебирать эти attachments, и если type == 'photo', рисовать картинку.
    function drawNews(news){
      var html = ('');
      for(var i = 1; i < news.length; i++){
          var n = news[i];
          n.date = new Date(n.date * 1000);
    
          var images = [], tmpl = '<img src="%SRC%" alt="">';
          if( n.attachments) {
            for( var j=0; j<n.attachments.length; j++) {
              if(n.attachments[j].type !== 'photo') continue;
              images.push(
                tmpl.replace('%SRC%', n.attachments[j].photo.photo_130)
              );
            }
          }
    
          html += '<div><div style="width:300px; height:auto;"><p>'+ n.text +'</p><p>'+ n.date.toString() +'</p></div>' + images.join('') + '</div>';
      }
      $('#news').html(html);
    }
    Ответ написан
    1 комментарий
  • Почему не проходит проверка vk api php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Проверить токен можно просто методом users.get() без параметров – при валидном токене он вернёт инфу про юзера, чей токен.
    Ответ написан
    Комментировать
  • Как деактивировать ключ вк сообщества через этот же самый ключ?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Такие методы API отсутствуют.

    Попробуйте задать вопрос в тех. поддержку ВК по API.
    Если отыщите решение, поделитесь, пожалуйста, в этом же вопросе.
    Ответ написан
    Комментировать
  • Как избежать лимитов VK API?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Чтобы понять, в чём дело, смотрите ответы ВК на каждый запрос – есть ли там поле error. Пишите их в лог, чтобы можно было разобраться пост-фактум.

    Чтобы избежать превышения лимитов при наплыве посетителей, не обрабатывайте запросы синхронно, а устройте очередь задач. Поступил запрос от посетителя – создайте задачу и сохраните её в очередь, а серверу ВК ответьте "ок" и больше ничего сейчас не предпринимайте. Другой процесс, постоянно работающий в фоне, пусть берет по одной задаче из очереди, обрабатывает и шлёт ответ пользователю. Пусть учитывает время трёх предыдущих отправленых вызовов к API ВК. И при необходимости, чуть ждёт, прежде, чем выполнять следующий.
    Ответ написан
    6 комментариев
  • Возможно ли создать чат-бота для ВК с помощью сервиса api.ai?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Среди поддерживаемых api.ai языков есть и Русский язык, поэтому ответ «да, возможно».
    Ответ написан
    Комментировать