Страница №2
5 June 2018, 18:22 MSK
Я уже писал о том, как отправить сообщение из PHP в Телеграм и как сделать своего Телеграм-бота, принимающего сообщения. Тема оказалась довольно популярной, но в связи с известными событиями у некоторых пользователей всё же могут возникать трудности. Недавно мне написал один их моих читателей и пожаловался, что мой скрипт из предыдущего поста у него на хостинге не работает.
Если вы не читали предыдущий пост по теме, сначала рекомендую прочитать его: https://kirkizh.ru/2018/04/telegram-php/.
Для решения этой проблемы проще всего использовать прокси сервер. Учтите, что прокся нужна обычная (HTTP/SOCKS), не специфичная телеграмовская (MTProxy).
Итак, новый код:
<?php
// сюда нужно вписать токен вашего бота define('TELEGRAM_TOKEN', '999999999:XXXXXXXXXXXXXXXXXXXXXXXXXXXX');
// сюда нужно вписать ваш внутренний айдишник define('TELEGRAM_CHATID', '99999999');
message_to_telegram('Привет!');
function message_to_telegram($text) {     $ch = curl_init();     curl_setopt_array(         $ch,         array(             CURLOPT_URL => 'https://api.telegram.org/bot' . TELEGRAM_TOKEN . '/sendMessage',             CURLOPT_POST => TRUE,             CURLOPT_RETURNTRANSFER => TRUE,             CURLOPT_TIMEOUT => 10,             CURLOPT_POSTFIELDS => array(                 'chat_id' => TELEGRAM_CHATID,                 'text' => $text,             ),             CURLOPT_PROXY => 'host:port',             CURLOPT_PROXYUSERPWD => 'login:password',             CURLOPT_PROXYTYPE => CURLPROXY_HTTP,             CURLOPT_PROXYAUTH => CURLAUTH_BASIC,         )     );     curl_exec($ch); }
Чтобы всё заработало, вам нужно прописать настройки вашей прокси:
  • CURLOPT_PROXY — адрес и порт, например, 127.0.0.1:3128;
  • CURLOPT_PROXYUSERPWD — логин и пароль, разделённые двоеточием;
  • CURLOPT_PROXYTYPE — тип прокси, одна из следующих констант: CURLPROXY_HTTP, CURLPROXY_SOCKS4, CURLPROXY_SOCKS5, CURLPROXY_SOCKS4A или CURLPROXY_SOCKS5_HOSTNAME;
  • CURLOPT_PROXYAUTH — метод авторизации, одна из следующих констант: CURLAUTH_BASIC и CURLAUTH_NTLM.
Если вы не знаете тип прокси и/или метод авторизации, попробуйте подобрать их методом перебора.
Если у вас остались вопросы, пишите их в комментарии или мне в Телеграм: @vkirkizh. Также подписывайтесь на мой канал: https://t.me/kirkizh. :-)
UPD: вот список рабочих прокси на 2 сентября 2018: 5.9.253.151:1080, 5.9.253.151:1081, 5.9.253.151:1082. Логин sensey, пароль sensey.
30 May 2018, 22:33 MSK
На днях я столкнулся с неочевидной проблемой с моим макбуком. Очередное обновление макоси, ничего необычного. Обновление скачалось, попросило перезагрузку, я согласился, но мак перезагружаться не хотел. Вместо этого показывал чёрный экран и курсор мыши. Я принудительно выключил/включил компьютер кнопкой питания и повторил процесс. Неудачно. Также оказалось, что простые перезагрузка/выключения мака перестали работать, симптомы те же.
Обычно при проблемах с маком рекомендуют сбросить SMC и сбросить NVRAM. Не помогло. Я позвонил в службу поддержки Эппл, те развели руками и посоветовали переустановить OS X. Переустаналивать систему мне не хотелось. Перезагружать компьютер всё время хард резетом и оставлять его без обновлений тоже.
Я перепробовал кучу разных вариантов, но всё тщетно. Уже отчаявшись найти простое решение проблемы, я заглянул в консоль и увидел там кучу ошибок, возникавших каждую секунду:
LaunchServices: Database mapping failed with result -10813, retries = 2
Очевидно, была какая-то связь. В рунете решение проблемы мне найти не удалось, но долгое гугление привело меня на форум Эппл. Оказалось, что проблема в фигне, которая называется Launch Services. Иногда ломается их база данных, и её необходимо пересоздать. Для этого необходимо открыть программу Terminal и выполнить две команды:
sudo mkdir /private/var/db/lsd
sudo /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -seed -lint -r -f -v -dump -domain local -domain system -domain user -domain network
В процессе вас попросят ввести пароль пользователя, потому что эти команды выполняются от имени администратора. В результате будет пересоздана БД служб запуска, и макось начнёт нормально перезагружаться и выключаться.
19 April 2018, 20:28 MSK
Любой хороший предприниматель знает, как важно в бизнесе иметь как можно больше информации о своих клиентах. Одна из таких полезных вещей — источник клиента: с какого канала продаж он пришёл, по какому объявлению кликнул, какой поисковый запрос ввёл и так далее. Поэтому любой хороший сайт отслеживает эти и другие данные, собирая статистику. Эту статистику можно передавать в CRM-систему и использовать для анализа эффективности рекламных компаний.
Если клиент заполняет форму непосредственно на сайте — запомнить данные об его источнике не составляет труда. Но что делать в том случае, если клиент, перейдя на сайт, не заполнял никаких форм, а просто позвонил? Данные с сайта не передаются в телефон, поэтому по-простому узнать, откуда пришёл клиент, совершивший звонок, не выйдет.
Для решения этой проблемы есть одна хитрость, которая называется коллтрекинг. Обычно, когда говорят про коллтрекинг, подразумевают дорогие сервисы с необходимостью накупить кучу телефонных номеров, которые будут подсовываться посетителям сайта в зависимости от источников (статический коллтрекинг) или сессий (динамический коллтрекинг). Всё это влетает в копеечку. Я расскажу, как сделать простой коллтрекинг бесплатно своими руками без регистрации и без смс, не нужно будет даже дополнительные номера покупать. Отмечу, метод не волшебный и обладает как плюсами, так и минусами.
Сегодня очень много людей ищет товары и услуги прямо со смартфонов. Почти половина трафика в рунете — с мобильных устройств. Важным моментом здесь является то, что люди, зайдя на сайт со смартфона, не перепечатывают телефонный номер в звонилку, а просто кликают по нему. Суть метода заключается в том, чтобы отследить клик по телефонному номеру на сайте, запомнить нужные данные о посетителе по клику, а затем связать звонок с кликом на основе временных меток.
16 April 2018, 23:52 MSK
Сегодня Роскомпозор начал думать, что заблокировал мессенджер Телеграм.
Около полутора лет назад я рассказывал, как сделать своего бота для Телеграма, который умеет принимать сообщения и отвечать на них. Но очень часто встаёт другая задача: необходимость отправлять какие-нибудь сообщения или уведомления от бота самому себе прямо из скрипта на PHP (например, с сайта). Это могут быть заявки из формы на сайте, сообщения мониторинга чего-либо, уведомления от каких-нибудь скриптов, ежедневные/еженедельные отчёты и т.д. Можно придумать тысячу сценариев, как это использовать.
Для начала необходимо создать бота. Как я уже писал в прошлой заметке, управление вашими ботами происходит через другого спецбота @BotFather. Для начала нужно добавить его в контакты и что-нибудь ему написать, после чего вы увидите список доступных команд. Отправьте боту команду /newbot, затем напишите в чат имя вашего бота, затем напишите уникальный логин вашего бота (должен заканчиваться на «bot»). В ответ вы получите авторизационный токен — сохраните его и никому не сообщайте. Этот бот будет отправлять нам сообщения.
У Телеграма довольно жёсткая политика конфиденциальности (поэтому там нет спама, как во всяких Вайберах), из-за которой ботом запрещено отправлять сообщения живым пользователям до тех пор, пока пользователь сам не начал беседу с ботом. Поэтому напишите любое сообщение вашему новому боту. Сделать это нужно всего один раз.
Далее необходимо узнать ваш внутренний айди в Телеграме. Проще всего это сделать с помощью бота @ShowJsonBot. Напишите любое сообщение этому боту. В ответ вам придут некие данные в формате JSON. Найдите поле chat, а в нём поле id. Это и есть ваш внутренний айдишник.
Теперь у нас всё готово для отправки сообщений из PHP прямо в Телеграм. Это можно сделать при помощи следующего скрипта:
<?php
// сюда нужно вписать токен вашего бота define('TELEGRAM_TOKEN', '999999999:XXXXXXXXXXXXXXXXXXXXXXXXXXXX');
// сюда нужно вписать ваш внутренний айдишник define('TELEGRAM_CHATID', '99999999');
message_to_telegram('Привет!');
function message_to_telegram($text) {     $ch = curl_init();     curl_setopt_array(         $ch,         array(             CURLOPT_URL => 'https://api.telegram.org/bot' . TELEGRAM_TOKEN . '/sendMessage',             CURLOPT_POST => TRUE,             CURLOPT_RETURNTRANSFER => TRUE,             CURLOPT_TIMEOUT => 10,             CURLOPT_POSTFIELDS => array(                 'chat_id' => TELEGRAM_CHATID,                 'text' => $text,             ),         )     );     curl_exec($ch); }
На этом всё. Если вы хотите, чтобы я сделал бота в Телеграме или другом мессенджере специально для вас, напишите мне: @vkirkizh.
1 April 2018, 22:20 MSK
Когда я нахожусь за границей в поездках, мне необходим мобильный интернет (смотреть карты, строить маршруты, гуглить инфу про места, читать отзывы, искать рестораны, отвечать на почту и т.д.), также мне необходимо оставаться на связи по телефону на своём номере.
Покупать каждый раз местную симку в каждой новой стране — плохая идея. Во-первых, местная симка решает только проблему с интернетом, но не с разговорами. Во-вторых, как правило, все они имеют предоплаченный тариф — то есть, надо заранее решить, сколько ты потратишь денег, неиспользованные средства сгорят. В-третьих, надо тратить время, специально куда-то ехать, чтобы купить эту симку. Не вариант.
Поэтому раньше я всегда пользовался дорогим роумингом. Недавно я был в Берлине и затестил новый способ оставаться всегда онлайн за границей, который гораздо бюджетнее.
Сначала решаем проблему с тем, как дёшево звонить и принимать звонки на своём номере за пределами России. Для этого нам нужен оператор Мегафон (увы, другие не подойдут). Я на нём уже более 15-ти лет, так что всё ОК. У Мегафона есть специальная услуга Мультифон (именно обычный Мультифон, а не Мультифон-Бизнес). Она бесплатная и позволяет совершать/принимать звонки, а также отправлять/принимать смски через интернет вместо GSM по своему домашнему тарифу (по сути, это превращает обычный телефон в IP-телефон). Для этого надо поставить специальное приложение Emotion (iOS, Android). Выглядит оно вот так:
emotion
Переключатель в правом верхнем углу позволяет выбирать между GSM-сетью и интернетом. На скриншоте выбран режим IP-телефонии (звонки и смс через интернет). В этом режиме, где бы мы ни находились, звонки и смски будут стоить столько же, сколько в домашнем регионе без всякого роуминга. Главное, чтобы был интернет. Звонить и отправлять смс нужно именно через это приложение, также в это приложение будут поступать входящие (на айфоне можно не бояться закрыть приложение — у меня всё отлично работало, звонки приходили даже с выключенным приложением, про андроид не в курсе). Если рядом есть вай-фай — больше ничего не нужно. Но, если не сидеть целыми днями в отеле или ресторанах, то вай-фая рядом не будет.
Теперь решаем проблему с дешёвым мобильным интернетом. Я перепробовал несколько вариантов и остановился на международной симке, которая называется Дримсим. Сама симка Дримсим с доставкой стоит 10€. Весь прикол в том, что во многих странах интернет через неё стоит очень дёшево (по сравнению с роумингом). Например, почти во всей Европе 1 гигабайт трафика будет стоить 10€. При этом, тарификация покилобайтная, и нет никаких ограничений (в том числе, на раздачу интернета на другие устройства в режиме модема). Одной симкой с одним счётом можно пользоваться в любой стране. У Дримсима есть своё удобное приложение:
drimsim
Работает это следующим образом. Вы заказываете симку, вам её привозят курьером (если заказать по специальной ссылке, то и мне, и вам дадут по 5€ на счёт). Далее пополняете счёт (это можно сделать любой банковской картой). Перед поездкой вынимаете вашу мегафоновскую симку и втыкаете дримсимовскую, включаете в мегафоновском приложении режим IP-телефонии. Профит. Если разговаривать по телефону через интернет через это приложение, трафика тратится очень немного. У меня получалось меньше 100 мегабайт за час разговора (это меньше 1€). Раньше я тратил минимум 10€ в день на роуминг, а теперь столько же трачу за целую короткую (4-5 дней) поездку.
Через Дримсим также можно совершать звонки напрямую, но это не имеет смысла. Во-первых, звонки будут идти с британского (+44) номера. Во-вторых, цены на звонки совсем не такие интересные, как цены на интернет.
Я пользовался связкой Дримсим+Мегафон в Германии и остался полностью доволен. Но у данного решения есть небольшой минус: Мегафон блокирует смски от банков в своём приложении. Частично это решается включением пуш-уведомлений, но не все банки так умеют. Плюс обычно подтверждения операций покупок по карте в интернете всё равно приходят в виде смсок. Также, к сожалению, далеко не во всех странах поддерживается LTE.
16 March 2018, 20:40 MSK
Дахау — один из первых концентрационных лагерей нацистов, находится недалеко от Мюнхена — столицы Баварии. Сейчас на этом месте открыт мемориальный комплекс в память о жертвах и узниках лагеря. Я побывал здесь во время поездки в Германию в августе 2017.
IMG_6393
11 March 2018, 03:40 MSK
Я долго думал, стоит ли публиковать в блоге не свой код, и решил, что иногда всё-таки стоит, потому что решение описываемой в этом посте проблемы в рунете мне найти не удалось.
Сразу к делу. В мобильном Сафари уже несколько Айосов подряд есть такая замечательная кнопка (вызывается по долгому нажатию на значок перезагрузки страницы в адресной строке):
request-desktop-site
Такая же кнопка есть в Хроме на Андроиде и Айосе. В английском интерфейсе называется «Request Desktop Site».
К сожалению, работает она по-дурацки: когда нажимаешь эту кнопку, браузер просто подменяет свой юзер-агент с мобильного на десктопный, и всё. Кто-нибудь верстает сайты так, чтобы подсовывать браузерам разные стили в зависимости от юзер-агента? Обычно нет.
6 March 2018, 00:20 MSK
Проблема подчёркивания ссылок в вебе стоит очень давно. Лично я согласен с Ководством Лебедева в том, что ссылки всегда должны быть подчёркнуты.
К сожалению, самый очевидный способ подчеркнуть ссылку — CSS-свойство text-decoration: underline; — имеет массу недостатков. Более-менее красиво такие ссылки будут выглядеть только у пользователей мака или айоса, причём, в любом браузере (спасибо, Эппл). Покажу на примере своего блога.
Внешний вид стандартных ссылок в ИЕ:
text-decoration-underline-ie
Это, конечно, никуда не годится. Линия очень жирная. Внешний вид стандартных ссылок на маке:
text-decoration-underline-mac
Уже лучше, линия тонкая (1 пк), но всё равно есть минусы. Во-первых, линия пересекает нижнюю часть буквы «у». Во-вторых, никаким образом кастомизировать (подвинуть по высоте, покрасить в другой цвет) линию не получится. В-третьих, работает только на яблочных девайсах. Таким образом, использовать свойство text-decoration — не вариант. Мы не будем рассматривать свойства text-decoration-style и другие, потому что их поддерживает полпроцента браузеров. Ищем другие пути.
4 March 2018, 01:10 MSK
— А погнали в Казань?
— Так зима же.
— Да пофиг.
— Погнали.
IMG_0527
24 February 2018, 18:30 MSK
9 августа, среда:
— Поехали в Нарву на машине на выходные?
— Может быть, тогда и в Таллин заедем ещё?
— Долго, давай лучше просто в Таллин самолётом.
— Давай. А что по билетам?
— В пятницу утром туда, вечером в воскресенье обратно.
— Отлично.
IMG_5850