#!/usr/bin/php <?php require_once('classis/autoload.php'); $request = new Request(); if(isset($argv[1]) && $argv[1] == '--getToken') { echo $request->getOauthLink();die; } $home = $_SERVER['HOME']; $config = include($home . '/.config/scrphp/config.php'); $nameScreenshot = date('Y_m_d_G_i_s_') . 'screen.png'; system('scrot -s /tmp/'.$nameScreenshot); $result = $request ->setToken($config['token']) ->setFileNameOnDisk($nameScreenshot) ->setPathToFile('/tmp/'.$nameScreenshot) ->upload() ->publicateFile(); $url = $result['public_url']; echo $url.PHP_EOL;
spl_autoload_register(function($name){ require_once __DIR__.'/'.$name.'.php'; });
<?php class Request { private $_token = null; private $_href = null; private $_method = null; private $_filePath = null; private $_fileName = null; /** * get oauth link */ public function getOauthLink() { /** * https://oauth.yandex.ru/authorize? * response_type=token * & client_id=< > * [& device_id=< >] * [& device_name=< >] * [& display=popup] * [& login_hint=< >] * [& force_confirm=yes] * [& state=< >] */ $link = 'https://oauth.yandex.ru/authorize' .'?response_type=token' . '&client_id=8fc231e60575439fafcdb3b9281778a3'; echo $link; } /** * set file path on disk * @param $filePath * @return $this */ public function setFileNameOnDisk($name) { /** * https://cloud-api.yandex.net/v1/disk/resources/upload ? * path=<, > */ $link = 'https://cloud-api.yandex.net/v1/disk/resources/upload?path='.urlencode('/'.trim($name,'/')); $response = file_get_contents($link,false,$this->_context('GET')); $responseAsArray = json_decode($response,true); $this->_href = $responseAsArray['href']; $this->_method = $responseAsArray['method']; $this->_fileName = $name; return $this; } /** * get path to file on local disk * @param $path * @return $this */ public function setPathToFile($path) { $this->_filePath = $path; return $this; } /** * upload file to disk */ public function upload() { $ch = curl_init($this->_href); curl_setopt($ch,CURLOPT_HTTPHEADER, array( 'Authorization', 'OAuth '.$this->_token ) ); curl_setopt($ch,CURLOPT_INFILE,fopen($this->_filePath,"r")); curl_setopt($ch,CURLOPT_INFILESIZE,filesize($this->_filePath)); curl_setopt($ch,CURLOPT_PUT,true); curl_exec($ch); curl_close($ch); return $this; } /** * public file and get public url for screenshot * @return mixed */ public function publicateFile() { /** * https://cloud-api.yandex.net/v1/disk/resources/publish ? * path=< > */ $link = 'https://cloud-api.yandex.net/v1/disk/resources/publish?path='.urlencode('/'.trim($this->_fileName,'/')); $response = file_get_contents($link,false,$this->_context('PUT')); $responseAsArray = json_decode($response,true); $publicateFile = file_get_contents($responseAsArray['href'],false,$this->_context($responseAsArray['method'])); $publicateFileAsArray = json_decode($publicateFile,true); return $publicateFileAsArray; } /** * set oauth token * @param $key * @return $this */ public function setToken($token) { $this->_token = $token; return $this; } /** * get context for request by file_get_contents * @param $method * @return resource */ private function _context($method) { /** * Authorization: OAuth <key> */ $opts = array( 'http'=>array( 'method'=>$method, 'header'=>"Authorization: OAuth ".$this->_token."\r\n" ) ); $context = stream_context_create($opts); return $context; } }
/** * get context for request by file_get_contents * @param $method * @return resource */ private function _context($method) { /** * Authorization: OAuth <key> */ $opts = array( 'http'=>array( 'method'=>$method, 'header'=>"Authorization: OAuth ".$this->_token."\r\n" ) ); $context = stream_context_create($opts); return $context; }
/** * set file path on disk * @param $filePath * @return $this */ public function setFileNameOnDisk($name) { /** * https://cloud-api.yandex.net/v1/disk/resources/upload ? * path=<, > */ $link = 'https://cloud-api.yandex.net/v1/disk/resources/upload?path='.urlencode('/'.trim($name,'/')); $response = file_get_contents($link,false,$this->_context('GET')); $responseAsArray = json_decode($response,true); $this->_href = $responseAsArray['href']; $this->_method = $responseAsArray['method']; $this->_fileName = $name; return $this; }
/** * upload file to disk */ public function upload() { $ch = curl_init($this->_href); curl_setopt($ch,CURLOPT_HTTPHEADER, array( 'Authorization', 'OAuth '.$this->_token ) ); curl_setopt($ch,CURLOPT_INFILE,fopen($this->_filePath,"r")); curl_setopt($ch,CURLOPT_INFILESIZE,filesize($this->_filePath)); curl_setopt($ch,CURLOPT_PUT,true); curl_exec($ch); curl_close($ch); return $this; }
/** * public file and get public url for screenshot * @return mixed */ public function publicateFile() { /** * https://cloud-api.yandex.net/v1/disk/resources/publish ? * path=< > */ $link = 'https://cloud-api.yandex.net/v1/disk/resources/publish?path='.urlencode('/'.trim($this->_fileName,'/')); $response = file_get_contents($link,false,$this->_context('PUT')); $responseAsArray = json_decode($response,true); $publicateFile = file_get_contents($responseAsArray['href'],false,$this->_context($responseAsArray['method'])); $publicateFileAsArray = json_decode($publicateFile,true); return $publicateFileAsArray; }
{ "files": [ "classis/autoload.php", "classis/Request.php", "screen.php" ], "main": "screen.php", "output": "srcphp.phar", "stub": true }
$ php box.phar build
$ chmod +x srcphp.phar $ cp srcphp.phar /usr/bin/srcphp
<?php // copy this file to /home/user/.config/srcphp/config.php return array( 'token' => 'your token' );
$ srcphp --getToken
Source: https://habr.com/ru/post/310694/
All Articles