Поддержка сервиса PushBullet

Новые релизы, обновления и т.п.

Модератор: immortal

Sat
Сообщения: 25
Зарегистрирован: Пт авг 07, 2015 5:08 pm
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Re: Поддержка сервиса PushBullet

Сообщение Sat » Ср фев 08, 2017 9:47 pm

В приложении от Wanderer была возможность задавать несколько APIKey и слать одновременно всем.
В варианте от Сергея, то есть в официальном варианте MD только 1 APIKey можно задать, и, соответственно, слать на устройства только из одной учетки.
У меня и у жены разные гугл-учтки на устройствах, соответственно, PushBullet-учетки тоже разные и у каждой свой APIKey.
Как быть теперь?
Аватара пользователя
Bagir
Сообщения: 1485
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 337 раз

Re: Поддержка сервиса PushBullet

Сообщение Bagir » Вт фев 14, 2017 9:20 pm

Долгое время я пользовался этим сервисом, но 20.05.2016 сообщения перестали приходить на телефон, и в аккаунт вообще. С веб странички отправить можно, аккаунт живой. В то время я подумал, что может быть сменили api или вообще прикрыли лавочку. Сейчас решил найти причину. Сам сервис жив, api по прежнему предоставляет. Обновления МД были, но софт на сервере не изменялся. Сейчас начал искать последние следы в коде.
Файл .\lib\pushbullet\pushbullet.inc.php function postToPushbullet($ph). Добавил в начало debmes('postToPushbullet'); но в Debug тишина. Похоже где то порвалась цепочка, которая приводит к запуску функции. minimum level выставлен ниже уровня сообщений. Мне нужно сейчас найти это место в коде. Если кто знает, подскажите. И вообще, у кого нибудь работает этот сервис сейчас?

вызов функции

Код: Выделить всё

include_once('./lib/pushbullet/pushbullet.inc.php'); postToPushbullet('Привет'); 
приводит к регистрации ошибки:
PushBulletException, cURL Error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Похоже придется копать api
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Аватара пользователя
Bagir
Сообщения: 1485
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 337 раз

Re: Поддержка сервиса PushBullet

Сообщение Bagir » Ср фев 15, 2017 12:35 pm

Наверное я напрасно панику поднял. Вероятно проблема на моей стороне. curl не хочет работать с https. Никакие танцы с сертификатами и отключением проверки не помогают. Интересно, что такого моглопроизойти на сервере. раньше curl работал при указании curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Аватара пользователя
Bagir
Сообщения: 1485
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 337 раз

Re: Поддержка сервиса PushBullet

Сообщение Bagir » Ср фев 15, 2017 1:26 pm

Если пытаюсь ломиться по http, то получаю This server is only accessible over HTTPS и вот такого замечательного кота "cat":"(=^‥^=)" из их зверинца разных котиков.
А есть у кого рабочий простой скрипт чтобы постучаться на какой нибудь сайт по https? Только проверенно рабочий, чтобы мне с ветряными мельницами не сражаться.
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Victor_S
Сообщения: 264
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Поддержка сервиса PushBullet

Сообщение Victor_S » Пт фев 17, 2017 1:41 pm

Bagir, у себя на рабочей системе активно пользую данный сервис по настоящее время. Все нормально работает. Но, я ничего на рабочей системе не обновлял уже около года. Система там крутится под Win7 64bit и старом server2go. Сейчас потихоньку готовлю переезд на новый сервер под линукс с современным окружением. Потихоньку, потому, что хочу не просто перенести, а несколько переосмыслить и переписать все. Поэтому заморочка с которой Вы столкнулись меня очень волнует. Пожалуйста, информируйте о "ходе расследования"...:)
Аватара пользователя
Bagir
Сообщения: 1485
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 337 раз

Re: Поддержка сервиса PushBullet

Сообщение Bagir » Пт фев 17, 2017 2:02 pm

Уже несколько раз пытался расковырять эту тему. К сожалению я пока не знаю причину. Вытащил php код и пробую отправить Pushbullet сообщение из сценария. В ответ получаю cURL Error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
До сих пор не понимаю почему. Ради интереса попробовал отправить Pushover сообщение так же использую cUrl. И всё сразу получилось. Вероятно с моей библиотекой curl всё в порядке. Да и не обновлял я её уже много лет.
в МД для отправки сообщений на Pushbullet и Pushover используется cUrl. код весьма схожий. Примеры api есть у обоих. Оба работают по https. Пока у меня нет решения.
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Victor_S
Сообщения: 264
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Поддержка сервиса PushBullet

Сообщение Victor_S » Пт фев 17, 2017 3:52 pm

Bagir писал(а): Пришлите мне пожалуйста ваш файл ./lib/pusbullet/pusbullet.inc.php' или просто его содержимое прямо тут в спойлере.
СпойлерПоказать

Код: Выделить всё

<?php
class PushBullet {
        private $_apiKey;

        const URL_PUSHES         = 'https://api.pushbullet.com/v2/pushes';
        const URL_DEVICES        = 'https://api.pushbullet.com/v2/devices';
        const URL_CONTACTS       = 'https://api.pushbullet.com/v2/contacts';
        const URL_UPLOAD_REQUEST = 'https://api.pushbullet.com/v2/upload-request';
        const URL_USERS          = 'https://api.pushbullet.com/v2/users';

        public function __construct($apiKey)
        {
                $this->_apiKey = $apiKey;

                if (!function_exists('curl_init')) {
                        throw new PushBulletException('cURL library is not loaded.');
                }
        }

        // Pushes

        public function pushNote($recipient, $title, $body = NULL)
        {
                return $this->_push($recipient, 'note', $title, $body);
        }

        public function pushLink($recipient, $title, $url, $body = NULL)
        {
                return $this->_push($recipient, 'link', $title, $url, $body);
        }

        public function pushAddress($recipient, $name, $address)
        {
                return $this->_push($recipient, 'address', $name, $address);
        }

        public function pushList($recipient, $title, $items)
        {
                return $this->_push($recipient, 'list', $title, $items);
        }

        public function pushFile($recipient, $filePath, $mimeType = NULL)
        {
                return $this->_push($recipient, 'file', $filePath, $mimeType);
        }

        public function getPushHistory($modifiedAfter = 0, $cursor = NULL)
        {
                $data = array();
                $data['modified_after'] = $modifiedAfter;

                if ($cursor !== NULL) {
                        $data['cursor'] = $cursor;
                }

                return $this->_curlRequest(self::URL_PUSHES, 'GET', $data);
        }
        
        public function dismissPush($pushIden) {
                return $this->_curlRequest(self::URL_PUSHES . '/' . $pushIden, 'POST', array('dismissed' => TRUE));
        }

        public function deletePush($pushIden)
        {
                return $this->_curlRequest(self::URL_PUSHES . '/' . $pushIden, 'DELETE');
        }

        // Devices

        public function getDevices()
        {
                return $this->_curlRequest(self::URL_DEVICES, 'GET');
        }

        public function deleteDevice($deviceIden)
        {
                return $this->_curlRequest(self::URL_DEVICES . '/' . $deviceIden, 'DELETE');
        }

        // Contacts
        
        public function createContact($name, $email)
        {
                if (filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
                        throw new PushBulletException('Create contact: Invalid email address.');
                }

                $queryData = array(
                        'name' => $name,
                        'email' => $email
                );

                return $this->_curlRequest(self::URL_CONTACTS, 'POST', $queryData);
        }

        public function getContacts()
        {
                return $this->_curlRequest(self::URL_CONTACTS, 'GET');
        }
        
        public function updateContact($contactIden, $name)
        {
                return $this->_curlRequest(self::URL_CONTACTS . '/' . $contactIden, 'POST', array('name' => $name));
        }

        public function deleteContact($contactIden)
        {
                return $this->_curlRequest(self::URL_CONTACTS . '/' . $contactIden, 'DELETE');
        }

        // Users

        public function getUserInformation()
        {
                return $this->_curlRequest(self::URL_USERS . '/me', 'GET');
        }

        public function updateUserPreferences($preferences)
        {
                return $this->_curlRequest(self::URL_USERS . '/me', 'POST', array('preferences' => $preferences));
        }


        private function _push($recipient, $type, $arg1, $arg2 = NULL, $arg3 = NULL)
        {
                $queryData = array();

                if (!empty($recipient)) {
                        if (filter_var($recipient, FILTER_VALIDATE_EMAIL) !== FALSE) {
                                $queryData['email'] = $recipient;
                        } else {
                                $queryData['device_iden'] = $recipient;
                        }
                }

                $queryData['type'] = $type;

                switch($type) {
                        case 'note':
                                $queryData['title'] = $arg1;
                                $queryData['body']  = $arg2;
                        break;


                        case 'link':
                                $queryData['title'] = $arg1;
                                $queryData['url']   = $arg2;

                                if ($arg3 !== NULL) {
                                        $queryData['body'] = $arg3;
                                }
                        break;


                        case 'address':
                                $queryData['name']    = $arg1;
                                $queryData['address'] = $arg2;
                        break;


                        case 'list':
                                $queryData['title'] = $arg1;
                                $queryData['items'] = $arg2;
                        break;


                        case 'file':
                                $fullFilePath = realpath($arg1);

                                if (!is_readable($fullFilePath)) {
                                        throw new PushBulletException('File: File does not exist or is unreadable.');
                                }

                                if (filesize($fullFilePath) > 25*1024*1024) {
                                        throw new PushBulletException('File: File size exceeds 25 MB.');
                                }

                                $queryData['file_name'] = basename($fullFilePath);

                                // Try to guess the MIME type if the argument is NULL
                                if ($arg2 === NULL) {
                                        $queryData['file_type'] = mime_content_type($fullFilePath);
                                } else {
                                        $queryData['file_type'] = $arg2;
                                }

                                // Request authorization to upload a file
                                $response = $this->_curlRequest(self::URL_UPLOAD_REQUEST, 'GET', $queryData);
                                $queryData['file_url'] = $response->file_url;
                                
                                // Upload the file
                                $response->data->file = '@' . $fullFilePath;
                                $this->_curlRequest($response->upload_url, 'POST', $response->data, FALSE, FALSE);
                        break;

                        default:
                                throw new PushBulletException('Unknown push type.');
                }

                return $this->_curlRequest(self::URL_PUSHES, 'POST', $queryData);
        }


        private function _curlRequest($url, $method, $data = NULL, $sendAsJSON = TRUE, $auth = TRUE)
        {
                $curl = curl_init();

                if ($method == 'GET' && $data !== NULL) {
                        $url .= '?' . http_build_query($data);
                }

                curl_setopt($curl, CURLOPT_URL, $url);

                if ($auth) {
                        curl_setopt($curl, CURLOPT_USERPWD, $this->_apiKey);
                }

                curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);

                if ($method == 'POST' && $data !== NULL) {
                        if ($sendAsJSON) {
                                $data = json_encode($data);
                                curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                                        'Content-Type: application/json',
                                        'Content-Length: ' . strlen($data)
                                ));
                        }

                        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
                }

                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);     // bad style, I know...
                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); 

                curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
                curl_setopt($curl, CURLOPT_HEADER, FALSE);

                $response = curl_exec($curl);

                if ($response === FALSE) {
                        $curlError = curl_error($curl);
                        curl_close($curl);
                        throw new PushBulletException('cURL Error: ' . $curlError);
                }

                $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);

                if ($httpCode >= 400) {
                        curl_close($curl);
                        throw new PushBulletException('HTTP Error ' . $httpCode);
                }

                curl_close($curl);

                return json_decode($response);
        }
}

class PushBulletException extends Exception
{
        // Exception thrown by PushBullet
}

/**
* Title
*
* Description
*
* @access public
*/
 function postToPushbullet($ph) {

  $push_bullet_apikey=trim(SETTINGS_PUSHBULLET_KEY);
  $p = new PushBullet($push_bullet_apikey);
  if (mb_strlen($title, 'UTF-8')>100) {
   $title=mb_substr($title, 0, 100, 'UTF-8').'...';
   $data=$ph;
  } else {
   $title=$ph;
   $data='';
  }


  if (defined('SETTINGS_PUSHBULLET_DEVICE_ID')) {
   $devices=explode(',', SETTINGS_PUSHBULLET_DEVICE_ID);
   $total=count($devices);
   for($i=0;$i<$total;$i++) {
    $push_bullet_device_id=trim($devices[$i]);
    if ($push_bullet_device_id) {

                  try {
                   $res=$p->pushNote($push_bullet_device_id, $title, $data);
                  } catch(Exception $e){
                   registerError('pushbullet', get_class($e).', '.$e->getMessage());
                  }

    }
   }
  } else {
   $res=$p->getDevices();
   $devices=$res->devices;
   $total=count($devices);
   for($i=0;$i<$total;$i++) {
    if ($devices[$i]->iden) {

                  try {
                   $res=$p->pushNote($devices[$i]->iden, $title, $data);
                  } catch(Exception $e){
                   registerError('pushbullet', get_class($e).', '.$e->getMessage());
                  }

    }
   }
  }
 }


?>
За это сообщение автора Victor_S поблагодарил:
Bagir (Пт фев 17, 2017 4:08 pm)
Рейтинг: 1.18%
Аватара пользователя
Bagir
Сообщения: 1485
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 337 раз

Re: Поддержка сервиса PushBullet

Сообщение Bagir » Пт фев 17, 2017 4:08 pm

Спасибо! сейчас посмотрим есть ли отличия.
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Аватара пользователя
Bagir
Сообщения: 1485
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 337 раз

Re: Поддержка сервиса PushBullet

Сообщение Bagir » Пт фев 17, 2017 4:27 pm

К великому моему сожалению файлы одинаковые. Впрочем я это и ожидал. Как итог:
Отправка через pushover работает

Код: Выделить всё

include_once('./lib/pushover/pushover.inc.php');
postToPushover('Тест отправки'); 
Отправка через pushbullet не работает

Код: Выделить всё

include_once('./lib/pushbullet/pushbullet.inc.php');
postToPushbullet('Тест отправки'); 
Регистрируется ошибка:
PushBulletException, cURL Error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Оба используют cUrl и https. API у этих сервисов практически одинаковые.

Ради интереса, давайте сравним версии cUrl.
В консоли наберите

Код: Выделить всё

phpinfo();
и поиском найдите "curl"
СпойлерПоказать
cURL support enabled
cURL Information 7.36.0
Age 3
Features
AsynchDNS Yes
Debug No
GSS-Negotiate Yes
IDN No
IPv6 Yes
Largefile Yes
NTLM Yes
SPNEGO Yes
SSL Yes
SSPI Yes
krb4 No
libz Yes
CharConv No
Protocols dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp
Host i386-pc-win32
SSL Version OpenSSL/0.9.8g
ZLib Version 1.2.7
libSSH Version libssh2/1.4.2
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Victor_S
Сообщения: 264
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Поддержка сервиса PushBullet

Сообщение Victor_S » Пт фев 17, 2017 4:48 pm

SSL Version OpenSSL/0.9.8g отличаются одной последней буквой. У меня l.
Вложения
curl.jpg
curl.jpg (46.41 КБ) 6188 просмотров
Ответить