FindRetro's API

Joe

Well-Known Member
Jun 10, 2012
4,172
1,955
There's probably 500 tutorials on this but people keep asking me.

Add 'findretros.php' and 'findretros_config.php' to your skins folder, add the 'client.php' code to the top of your client, or anywhere on your CMS where you want them to vote. Make sure to edit 'Example' in the findretros_config.php to your FindRetro's server username.

PHP:
<?php
class FindRetros {
    private $pageName, $callTimeout, $usingCloudFlare, $apiPath;
    function __construct() {
        global $_CONFIG;
        $this->pageName        = $_CONFIG['pagename'];
        $this->requestTimeout  = $_CONFIG['timeout'];
        $this->usingCloudFlare = $_CONFIG['cloudflare'];
        $this->apiPath         = $_CONFIG['api'];
        if($this->usingCloudFlare) {
            if(isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
                $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
            }
        }
    }
    public function hasClientVoted() {

        if(!$this->_isVoteCookieSet()) {
            $urlRequest = $this->apiPath . 'validate.php?user=' . $this->pageName . '&ip=' . $_SERVER['REMOTE_ADDR'];
            $dataRequest = $this->_makeCurlRequest($urlRequest);
            if(in_array($dataRequest, array(1, 2))) {
                $this->_setVoteCookie();
                return true;
            }else if($dataRequest == 3) {
                return false;
            }else{
                /* There's something wrong with FindRetros, so we will mark the user as voted and have them proceed as if they voted. */
                $this->_setVoteCookie();
                return true;
            }
        }
        return true;
    }
    public function redirectClientToVote() {
        header('Location: ' . $this->apiPath . 'rankings/vote/' . $this->pageName);
        exit;
    }
    private function _makeCurlRequest($url) {
        if(function_exists('curl_version')) {
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_HEADER, 0);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($curl, CURLOPT_TIMEOUT, $this->requestTimeout);
            curl_setopt($curl, CURLOPT_USERAGENT, 'FindRetros Vote Validator');
            $requestData = curl_exec($curl);
            curl_close($curl);
        }else{
            $requestData = stream_context_create(array('http' => array('timeout' => $this->requestTimeout)));
            return @file_get_contents($url, 0, $requestData);
        }
        return $requestData;
    }
    private function _setVoteCookie() {
        $rankingsResetTime = $this->_getRankingsResetTime();
        setcookie('voting_stamp', $rankingsResetTime, $rankingsResetTime);
    }
    private function _isVoteCookieSet() {
        if(isset($_COOKIE['voting_stamp'])) {
            if($_COOKIE['voting_stamp'] == $this->_getRankingsResetTime()) {
                return true;
            }else{
                setcookie('voting_stamp', '');
                return false;
            }
        }
        return false;
    }
    private function _getRankingsResetTime() {
        $serverDefaultTime = date_default_timezone_get();
        date_default_timezone_set('America/Chicago');
        $rankingsResetTime = mktime(0, 0, 0, date('n'), date('j') + 1);

        date_default_timezone_set($serverDefaultTime);
    
        return $rankingsResetTime;
    }
}
PHP:
<?php
$_CONFIG = array(
    /* What is "username" of your page on FindRetros? */

    'pagename' => 'Example',
    /* How many seconds should it take to try and reach FindRetros if it's down? */
    'timeout'  => 2,
    /* Are you using CloudFlare? If so, set this to true. */
    'cloudflare' => false,
    /* Incase FindRetros.com has a new domain, change it below. */
    'api' => 'https://findretros.com/'
);
PHP:
<?php
require_once 'findretros_config.php';
require_once 'findretros.php';
$FindRetros = new FindRetros();
if($FindRetros->hasClientVoted()) {
    echo 'You have voted!';
}else{
    // echo 'You have yet to vote!';
    $FindRetros->redirectClientToVote();
}
 
Last edited:

Silver

Active Member
Aug 17, 2016
152
28
Fucking..

Code:
<?php

require_once 'findretros_config.php';
require_once 'findretros.php';
$FindRetros = new FindRetros();
if($FindRetros->hasClientVoted()) {
    echo 'You have voted!';
}else{
    // echo 'You have yet to vote!';
    $FindRetros->redirectClientToVote();
}



?>

Include the end tag.
 

Weasel

👄 I'd intercept me
Nov 25, 2011
4,135
2,461
Fucking..

Code:
<?php

require_once 'findretros_config.php';
require_once 'findretros.php';
$FindRetros = new FindRetros();
if($FindRetros->hasClientVoted()) {
    echo 'You have voted!';
}else{
    // echo 'You have yet to vote!';
    $FindRetros->redirectClientToVote();
}



?>

Include the end tag.

Not sure what you are talking about, or why you are swearing, but omitting the PHP end tag in a PHP-only file is actually common (/best) practice.
 

Laynester

a bad bitch
Nov 7, 2018
305
437
Fucking..

Code:
<?php

require_once 'findretros_config.php';
require_once 'findretros.php';
$FindRetros = new FindRetros();
if($FindRetros->hasClientVoted()) {
    echo 'You have voted!';
}else{
    // echo 'You have yet to vote!';
    $FindRetros->redirectClientToVote();
}



?>

Include the end tag.
you couldve easily enabled php error reporting and found that out yourself
 

Joe

Well-Known Member
Jun 10, 2012
4,172
1,955
Fucking..

Code:
<?php

require_once 'findretros_config.php';
require_once 'findretros.php';
$FindRetros = new FindRetros();
if($FindRetros->hasClientVoted()) {
    echo 'You have voted!';
}else{
    // echo 'You have yet to vote!';
    $FindRetros->redirectClientToVote();
}



?>

Include the end tag.
You’re welcome
 

Users who are viewing this thread

Top