diff options
author | Anton L. Šijanec <sijanecantonluka@gmail.com> | 2020-04-10 18:07:04 +0200 |
---|---|---|
committer | Anton L. Šijanec <sijanecantonluka@gmail.com> | 2020-04-10 18:07:04 +0200 |
commit | e15988c1c61e517ba7e515647b601d0c31e571e1 (patch) | |
tree | 8a46251a7f188dff0a9fd49c7c8770dc4dc4d201 | |
download | oldredditclient-e15988c1c61e517ba7e515647b601d0c31e571e1.tar oldredditclient-e15988c1c61e517ba7e515647b601d0c31e571e1.tar.gz oldredditclient-e15988c1c61e517ba7e515647b601d0c31e571e1.tar.bz2 oldredditclient-e15988c1c61e517ba7e515647b601d0c31e571e1.tar.lz oldredditclient-e15988c1c61e517ba7e515647b601d0c31e571e1.tar.xz oldredditclient-e15988c1c61e517ba7e515647b601d0c31e571e1.tar.zst oldredditclient-e15988c1c61e517ba7e515647b601d0c31e571e1.zip |
-rw-r--r-- | bettereveryloop.php | 14 | ||||
-rw-r--r-- | main.php | 157 |
2 files changed, 171 insertions, 0 deletions
diff --git a/bettereveryloop.php b/bettereveryloop.php new file mode 100644 index 0000000..da8c343 --- /dev/null +++ b/bettereveryloop.php @@ -0,0 +1,14 @@ +#!/usr/bin/env php +<?php + // how to write ugly code + if ($argc != 4 ) + exit ($argv[0]." username password subreddit"); + require_once ("main.php" ); + $o = new oldredditClient( ); + $o-> setusername ($argv[1] ); + $o-> setpassword ($argv[2] ); + while (1 ){ + $o-> setflair ($argv[3] ); + sleep (3 )} + // reddit is max 30 requests per minute tho +?> diff --git a/main.php b/main.php new file mode 100644 index 0000000..fe160ef --- /dev/null +++ b/main.php @@ -0,0 +1,157 @@ +#!/usr/bin/env php +<?php + function strip_tags_content($text, $tags = '', $invert = FALSE) { + preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags); + $tags = array_unique($tags[1]); + if(is_array($tags) AND count($tags) > 0) { + if($invert == FALSE) { + return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?</\1>@si', '', $text); + } else { + return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?</\1>@si', '', $text); + } + } elseif($invert == FALSE) { + return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text); + } + return $text; + } + + function is_domDocument($object) { + if($object instanceof DOMDocument) { + return true; + } else { + return false; + } + } + function DOMinnerHTML($element) { + try { + $innerHTML = ""; + $children = $element->childNodes; + foreach ($children as $child) { + $innerHTML .= $element->ownerDocument->saveHTML($child); + } + return $innerHTML; + } catch(Exception $e) { + echo "EXCEPTION IN DOMinnerHTML: ", $e->getMessage(); + } + } + function endsWith($haystack, $needle) { + $length = strlen($needle); + if ($length == 0) { + return true; + } + return (substr($haystack, -$length) === $needle); + } + function startsWith ($string, $startString) { + $len = strlen($startString); + return (substr($string, 0, $len) === $startString); + } + function get_string_between($string, $start, $end){ + $string = ' ' . $string; + $ini = strpos($string, $start); + if ($ini == 0) return ''; + $ini += strlen($start); + $len = strpos($string, $end, $ini) - $ini; + return substr($string, $ini, $len); + } +/* +Errors: + -1 username or password not specified (aj blin dis a mast sou dej hev jor informejšon) + -2 you are not logged in (aj blin trms of srvis bi neseseri) + -3 bad username and/or password (diplomatski odgovor ;-) + -4 not written yet (suka bljet) + -5 + -6 error in fetched data + 0 bad + 1 good +*/ + class oldredditClient { + private $username; + private $password; + public $version = array(0, 0, 0); + private $programname = "oldredditclient"; + private $programdomain = 'oldredditclient.sijanec.eu'; + private $cookiedir; // set at runtime, ker je get_curerent_user, v login() + private $loginurl = "https://old.reddit.com/api/login/"; + private $setflairurl = "https://old.reddit.com/api/selectflair"; + public $modhash = ""; + private $loggedin = false; + public $ch = false; + public function setusername($value) { + $this->username = $value; + } + public function setpassword($value) { + $this->password = $value; + } + private function get($property) { + return $this->$property; + } + public function getversion() { + return $this->version; + } + public function login() { + if (empty($this->username) || empty($this->password)) { + return -1; + } + $this->cookiedir = '/tmp/'.posix_getuid().'/'.$this->programdomain.'/cookiedir/'; + if (!is_dir($this->cookiedir.$this->username)) { + if (!mkdir($this->cookiedir.$this->username, 0700, true)) { // x permišn mora bit', da lahko dela poddirektorije, hence true, hence 0700; group in others pa je 0, da ne morejo brati piškotkov!!! zeloo pomembno! + return -5; + } + } + if(curl_getinfo($this->ch)) { + return 2; + } + $ch = curl_init(); + // curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0); + curl_setopt($ch, CURLOPT_COOKIESESSION, true ); + curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookiedir.$this->username."/cookie.txt" ); // cookiejar + curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookiedir.$this->username."/cookie.txt" ); // coolie file // this scuks + // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); + // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + // curl_setopt($ch, CURLOPT_HEADER, 1); // return headers? + curl_setopt($ch, CURLOPT_VERBOSE, TRUE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return transfer? + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // follow 3xx redirects? + curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // max 3xx redirectas? + curl_setopt($ch, CURLOPT_USERAGENT, $this->programdomain."/".implode(".", $this->version)); + curl_setopt($ch, CURLOPT_AUTOREFERER, 1); // auto send refereres? + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // timeout for tcp connection + curl_setopt($ch, CURLOPT_TIMEOUT, 10); // timeout for http response + curl_setopt($ch, CURLOPT_URL, $this->loginurl.$this->username); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, 'op=login-main&user='.$this->username.'&passwd='.$this->password.'&api_type=json'); + $login_output = curl_exec($ch); + if(curl_getinfo($ch, CURLINFO_RESPONSE_CODE) != 200) { + return false; + } + $this->modhash = json_decode($login_output, true)["json"]["data"]["modhash"]; + $this->ch = $ch; + return true; + } + public function setflair($sub = "Slovenia", $flair = null, $magic = "bc411828-bfa2-11e5-ba67-0e414077483d") { + if(!curl_getinfo($this->ch)) { + if (!$this->login()) { + return -2; + } + } + $ch = $this->ch; + if($flair == null) { + $dnevi = array("drekek", "ponedeljek", "torek", "sreda", "cetrtek", "petek", "sobota", "nedelja"); + $flair = $dnevi[date("N")].", ".date("j.n.Y H:i:s"); + } + curl_setopt($ch, CURLOPT_URL, $this->setflairurl); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + 'X-Modhash: '.$this->modhash, + 'X-ContactBotDeveloper: '."sijanecantonluka@gmail.com", + "X-UselessBot: true" + )); + curl_setopt($ch, CURLOPT_POSTFIELDS, 'flair=login-main&name='.$this->username.'&r='.$sub.'&flair_template_id='.$magic.'&text='.$flair); + $request_output = curl_exec($ch); + if(curl_getinfo($ch, CURLINFO_RESPONSE_CODE) != 200) { + return false; + } + return true; + } + } +?> |