summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton L. Šijanec <sijanecantonluka@gmail.com>2020-04-10 18:07:04 +0200
committerAnton L. Šijanec <sijanecantonluka@gmail.com>2020-04-10 18:07:04 +0200
commite15988c1c61e517ba7e515647b601d0c31e571e1 (patch)
tree8a46251a7f188dff0a9fd49c7c8770dc4dc4d201
downloadoldredditclient-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.php14
-rw-r--r--main.php157
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;
+ }
+ }
+?>