• Как ВКонтакте узнает о поисковых запросах, по которым я искал в Яндексе?

    neluzhin
    @neluzhin
    Яндекс является рекламным партнером ВКонтакте и проталкивает в таргетинговую рекламу (которая под левым меню) собственные баннеры. Что примечательно, такие баннеры имеют другие и более мягкие ограничения по количеству символов в описании и названии, нежели те, что накладывает на вас ВКонтакте при создании объявления, а также подобные баннеры могут даже нарушать сами правила ВК. Например, ВКонтакте запрещает обращаться к пользователям в таргетинговой рекламе на "ты", но баннеры Яндекса этот момент частенько игнорируют. Таким образом нельзя исключать, что Яндекс имеет какие-то внутренние алгоритмы или договоренности с ВК, которые позволяют ему на основе одних лишь поисковых запросов составлять группу ретаргетинга.

    Собственно, подробнее о группе ретаргетинга. Владельцы сайтов устанавливают в разметке страницы "пиксели" (картинка размером 1 на 1 пиксель) в теге <img>, которые хостятся на серверах ВКонтакте. Когда юзер загружает эту картинку, то ВКонтакте с помощью cookies определяет ID пользователя и добавляет его в группу ретаргетинга. Затем этой группе можно будет показывать объявления.

    Нередко владельцы сайтов продают места для пикселей другим компаниям, чтобы те могли показывать более релевантные баннеры. Допустим, вы - владелец форума о пылесосах. Какая-нибудь торговая сеть, например МВидео или Юлмарт, может арендовать у вас размещение своего пикселя, который будет собирать для них базу ретаргетинга. И затем они будут показывать вашей аудитории рекламу своих товаров (пылесосов) во ВКонтакте.
    Ответ написан
    1 комментарий
  • Insert ignore в laravel?

    neluzhin
    @neluzhin
    Попробуйте методы firstOrNew() или firstOrCreate(). Но они позволяют добавлять только по одной записи. См. Inserting & Updating Models > Other Creation Methods.
    Ответ написан
    Комментировать
  • Как сделать тему в письме?

    neluzhin
    @neluzhin
    Если вкратце, создайте в форме поле, отвечающее за тему обращения:

    <input type="text" name="subject">

    В PHP коде добавьте в начале:

    $subject = isset($_POST['subject']) ? $_POST['subject'] : 'Заголовок письма, если поле не заполнили в форме на сайте';

    И чуть ниже удалите эту строку, т.к. мы уже задаем переменную $subject выше:

    $subject = "$formData";

    Но, по хорошему, вам следует переработать логику скрипта отправки почты. Например, добавить больше проверок на заполненность полей и защиту от XSS.
    Ответ написан
    Комментировать
  • Как проверить, что данные не подделаны (API ВКонтакте)?

    neluzhin
    @neluzhin
    Это называется "цифровая подпись". Это когда вы можете быть уверены, что переданные вам данные являются подлинными. Вы знакомы с односторонним шифрованием, типа MD5, SHA1, SHA256 и т.п.? Это процесс, когда вы шифруете данные так, что их невозможно будет расшифровать. Единственное, что можно делать с зашифрованными данными - это проводить сверку. Допустим, когда вы качаете файл с торрент-треккера, там указывают хэш-сумму файла. Когда вы скачиваете файл, вам по хорошему стоит проверить, совпадает ли хэш на треккере с хэшем закаченного вами файла. Если не совпадает, значит, файл повредился в процессе закачки, короче он не соответствует оригиналу. Вот примерно аналогично работают цифровые подписи во ВКонтакте, платежных системах и во многих других сервисах.

    Прежде, чем отдать вам "параметры запуска" (ID пользователя, ID группы, откуда запустили, и т.п.), ВКонтакте считает цифровую подпись, подмешивая в неё секретный ключ приложения. Не зная секретного ключа приложения, никто не сможет сгенерировать валидную цифровую подпись. ВКонтакте в приведенном вами примере кода показывает, каким образом они генерируют у себя цифровую подпись, чтобы вы поняли как это вообще работает. Вы должны по этому же алгоритму сгенерировать подпись на сервере и при запуске приложения проверять, соответствует ли сгенерированная вами подпись той, что отдает вам ВКонтакте. Если соответствует, значит, пользователь не подделывал параметры запуска. Если не соответствует, значит, можно закрыть доступ к некоторым функциям вашего приложения или отбросить какую-нибудь HTTP-ошибку, например, 400 или 401.
    Ответ написан
    Комментировать
  • Почему инпут расположен криво?

    neluzhin
    @neluzhin
    Кто-нибудь знает почему инпут с кнопкой смещены вниз и находятся не на одной линии с остальными элементами ?

    Потому что у элемента <nav> задан display: block. Замените на display: inline-block. Также уберите у формы float: right и добавьте ей display: inline-block.

    почему между кнопкой и инпутом расстояние, хотя padding 0 margin 0.

    Потому что <input> и <button> - это inline-блоки. Поэтому между ними перенос строки браузер превращает в пробел. Вам поместить их в одну строку вот так:

    <input type="text" placeholder="Search on site" name="search" required><button type="submit">O</button>
    Ответ написан
    Комментировать
  • Как разделить комментарии ВК?

    neluzhin
    @neluzhin
    Атрибут id подразумевает уникальность элемента, следовательно, на странице не может быть два элемента с одинаковыми ID. Метод VK.Widgets.Comments() первым параметром принимает именно этот самый ID элемента. Вам надо сделать что-то вроде такого:

    Первый блок комментариев:
    <div id="vk_comments_1"></div>
    <script type="text/javascript">
      VK.Widgets.Comments("vk_comments_1", {redesign: 1, limit: 20, width: "1060", attach: "*"});
    </script>


    Второй блок комментариев:
    <div id="vk_comments_2"></div>
    <script type="text/javascript">
      VK.Widgets.Comments("vk_comments_2", {redesign: 1, limit: 20, width: "1060", attach: "*"});
    </script>


    Также, если вы хотите разместить несколько блоков комментариев на странице, чтобы в них были разные комментарии, вам надо будет в метод VK.Widgets.Comments() передать третий параметр с уникальным ID, иначе ВК будет в обоих виджетах отображать одинаковые комментарии. Например, у первого виджета можно поставить число 1, а у второго - число 2 Что это такое и зачем это нужно я отвечал вот здесь: Как сделать чат из комментариев ВК? (см. комментарии к ответу).
    Ответ написан
    5 комментариев
  • Какие есть способы предотвращения воровства файлов?

    neluzhin
    @neluzhin
    Полностью защититься не получится, но как минимум можно сделать код абсолютно неподдерживаемым - черт ногу сломит даже при малейших изменениях.

    Для начала, вы должны заинлайнить всё в один HTML-файл, как предложил Александр Татарин. Обязательно минифицируйте и объедините JS и засуньте его в единственный тег <script>. После минификации имена переменных вашего кода будут нечитаемыми.

    Затем прогоните страницу через HTML Muncher - это такая штука, которая переименует все CSS-классы в теге <style>, в атрибутах class вашей разметки, а также заменит все совпадения имен классов в JavaScript. Таким образом, был у вас класс .home, а станет .a, .icon превратится в .b и т.д.

    Ну а затем уже обмазываться тем, что порекомендовал вам пользователь neeil.
    Ответ написан
    Комментировать
  • Аренда дешевого дискового пространства, подскажете?

    neluzhin
    @neluzhin
    Под хранение картинок, может, Imgur будет выгоднее? Хранение бесплатное и бессрочное, платите только за загрузку картинок.

    yGaNF9X.png
    Ответ написан
    3 комментария
  • VK API Не отправляет кириллицу?

    neluzhin
    @neluzhin
    У вас, наверное, PHP-файл в кордировке отличной от UTF-8.

    Также используйте более современные инструменты, например, cURL:

    <?php
    
    function send($id, $message) {
    	$ch = curl_init();
    	$parameters = http_build_query([
    		'user_id'      => $id,
    		'message'      => $message,
    		'access_token' => 'fa0mfbc2b13c3104f48fd2g75e0a770b34119c89f0e16f75e1502f03e9346413c10b8ad428737496f5602',
    		'v'            => '5.59'
    	]);
    
    	curl_setopt($ch, CURLOPT_URL, 'https://api.vk.com/method/messages.send');
    	curl_setopt($ch, CURLOPT_POST, TRUE);
    	curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    	curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
    	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    	curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    
    	// Результат запроса к API
    	$result = curl_exec($ch);
    
    	curl_close($ch);
    }
    Ответ написан
  • HTML скрипт подтверждения Предлагаемых новостей в группе ВК?

    neluzhin
    @neluzhin
    С такими запросами вам следует обращаться на фриланс-биржи. Тостер - ресурс для людей, которые хотят понять и научиться. Такие "HTML-скрипты" пишутся на самой начальной стадии изучения любого языка программирования, особенно если этот язык программирования - это какой-нибудь PHP.
    Ответ написан
  • Как вывести последние комментарии ВК на сайте?

    neluzhin
    @neluzhin
    На вашем скриншоте самый обычный официальный виджет комментариев.
    Ответ написан
    Комментировать
  • Как лучше решить (PHP, VK API)?

    neluzhin
    @neluzhin
    Я бы не сказал, что cron с этим не справится. На cron какие только велосипеды не писались, поэтому стоит попробовать.

    Но давайте отбросим костыли и попробуем сначала все сделать по фэншую. Вы сообщения принимаете от пользователей в ЛС сообщества? Если да, то Callback API - ваш верный друг. Используя эту штуку, ВК сам будет сообщать POST-запросами вашему скрипту, когда вам написали в ЛС сообщества. А вы уже там сможете сразу текст для ответа подобрать и стандартными методами API ответить на него.

    Если вы принимаете сообщения со страницы пользователя, то готовьтесь собирать велосипед из крона. По хорошему вам следует запускать 2 скрипта: первый с интервалом в ~5 секунд будет добавлять сообщения пользователей в базу данных, а второй с интервалом в секунду будет проверять эту базу данных и отвечать на эти сообщения. Для красоты можно это все через метод execute реализовать, чтобы хоть как-то обойти ограничение на 3 обращения к API в секунду.

    UPD.
    Также посмотрите на Long Poll. Сам никогда не работал с этой фичей, но, возможно, это то, что вам нужно.
    Ответ написан
    Комментировать
  • Можно ли через VK API спарсить список ID с кем переписывался определенный ID?

    neluzhin
    @neluzhin
    Как и в любой другой нормальной социальной сети - нельзя. Возможность узнать, с кем общается тот или иной человек, явно идет в разрез с таким понятием как "приватность".
    Ответ написан
    Комментировать
  • Какой символ перевода строки для ВКонтакте?

    neluzhin
    @neluzhin
    \n же, как и везде. Не забудьте про двойные кавычки.

    $message = "Сегодня я съем\nэти вкусные печеньки.";
    Ответ написан
    Комментировать
  • Как формировать value для input[type=file]?

    neluzhin
    @neluzhin
    Вы не сможете изменить или задать атрибут value из соображений безопасности. По хорошему, вам надо сделать систему drag-n-drop так, чтобы данные при выборе файла вручную и данные при drag-n-drop'е хранились в одном месте (в скрытом div'е или может быть в какой-нибудь переменной), а затем уже AJAX-ом отправлять эти данные на сервер.

    Настоятельно рекомендую ознакомиться с разжевыванием техники чтения локальных файлов и реализации функции drag-n-drop от Эрика Бидельмана: www.html5rocks.com/ru/tutorials/file/dndfiles/
    Ответ написан
    Комментировать
  • Почему когда offset ставлю больше 1000, то перестает искать варианты?

    neluzhin
    @neluzhin
    С помощью данного метода можно получить только 1000 первых сообществ независимо от того, что указано в параметре offset. Цитата со страницы метода groups.search:

    Обратите внимание — даже при использовании параметра offset для получения информации доступны только первые 1000 результатов.
    Ответ написан
    Комментировать
  • Что может содержать в себе одна из главных функций jquery $();?

    neluzhin
    @neluzhin
    Только CSS-селекторы и те, что встроены в jQuery. Также функция принимает объекты DOM, возвращаемые функциями типа document.getElementById(), document с window и jQuery-объекты, типа $($('div')).
    Ответ написан
    Комментировать
  • Как проверить валидность токена VK?

    neluzhin
    @neluzhin
    Уже отвечал на этот вопрос вот тут: Как проверить информацию по токену через API ВКонтакте?

    Также почитайте комментарии к ответу.
    Ответ написан
    Комментировать
  • Каким решением наиболее оптимально нарисовать и анимировать данный граф?

    neluzhin
    @neluzhin
    Может, вам подойдет Highcharts? Похожая анимация из работает коробки: демо.

    Очень мощная библиотека с хреновой тучей настроек и не лагает даже при нескольких миллионах отметок на графиках (работает через canvas), но есть большой минус - для использования в коммерческих проектах надо покупать лицензию.
    Ответ написан
    Комментировать
  • Как установить более одной reCaptcha на странице?

    neluzhin
    @neluzhin
    Вы инициализируете капчу с помощью HTML, поэтому она рендерится всего один раз. Чтобы добавить их несколько на сайт, надо инициализировать капчу с помощью JavaScript.

    Для начала, подключайте API таким образом:

    <script src="https://www.google.com/recaptcha/api.js?onload=recaptchaCallback&render=explicit" async defer></script>

    Параметр render со значением explicit говорит, что капча будет инициализироваться не через HTML, а через JavaScript. А параметр onload содержит название JavaScript-функции, которая исполнится в момент загрузки страницы (в нашем случае это recaptchaCallback()).

    Теперь, собственно, надо написать какой-то JavaScript. Выглядеть он будет примерно так:

    var feedbackCaptcha;
    var authCaptcha;
    
    function recaptchaCallback() {
    	feedbackCaptcha = grecaptcha.render('feedback_captcha', {
    		'sitekey' : 'ваш_site_key',
    		'theme' : 'dark'
    	});
    	
    	authCaptcha = grecaptcha.render('auth_captcha', {
    		'sitekey' : 'ваш_site_key'
    	});
    }

    Тут мы создаем функцию recaptchaCallback(), при вызове которой будут рендериться две капчи: одна в элементе #feedback_captcha, а вторая - в #auth_captcha. У первой капчи будет тёмная тема.

    Разместим мы капчу на сайте примерно так:

    <form>
    	<!-- тут какие-то поля для оставления отзыва о сайте -->
    	<div id="feedback_captcha"></div>
    </form>
    <form>
    	<!-- тут какие-то поля для авторизации -->
    	<div id="auth_captcha"></div>
    </form>

    Для чего мы заключаем функции, которые рендерят капчу, в переменные? А нужно это для того, чтобы мы могли индивидуально для каждой капчи исполнять методы. Например, хорошо бы при каждой отправке AJAX-формы авторизации сбрасывать капчу. Сбрасывать мы будем ее так:

    grecaptcha.reset(authCaptcha)

    Также почитайте документацию: developers.google.com/recaptcha/docs/display
    Ответ написан
    3 комментария