1
wishcraft
Part1://tweetables.php - Includes ie. for wordpress -- forums, tag's categories!!

XOOPS - (With Xforum Lookup)

This example is retrieving the pages with tag categories to receive a dial-able file for crons to find categories of content like a journal for suggestion of links on twitter like where this file is from http://hempembassy.net/tweetable.php..


<?php
/**
 *  Xoops Functions
 *
 * You may not change or alter any portion of this comment or credits
 * of supporting developers from this source code or any supporting source code
 * which is considered copyrighted (c) material of the original comment or credit authors.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * @copyright       The XOOPS Project http://sourceforge.net/projects/xoops/
 * @license         GNU GPL 2 (http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
 * @package         kernel
 * @since           2.5.7
 * @version         $Id: tweetables.php XXXXX XXXX-XX-XX XX:XX:XXZ xxxxxx $
 */ 


    
$supports = array('xforum', 'xcenter');
    require_once( 
dirname(__FILE__) . '/mainfile.php' );
    @include_once 
XOOPS_ROOT_PATH . "/modules/tag/include/functions.php";
    
    
$module_handler = xoops_gethandler('module');
    
$modids = array();
    foreach(
$supports as $dirname) {
        
$mod = $module_handler->getByDirname($dirname);
        if (
is_object($mod))
            
$modids[$mod->getVar('mid')] = $mod->getVar('mid');
    }
    
$results = array();
    
$criteria = new criteria('tag_modid', "(" . implode(", ", $modids) . ")", "IN");
    
$criteria->setSort("RAND()");
    
$criteria->setLimit(mt_rand(22, 42));
    
$links_handler = xoops_getmodulehandler('link', 'tag');
    
$tags_handler = xoops_getmodulehandler('tag', 'tag');
    
$tags = $mods_ids = $cats_ids = $items_ids = array();
    foreach(
$links_handler->getObjects($criteria, false) as $link)
    {
        
$items_ids[$link->getVar("tag_itemid")] = $link->getVar("tag_itemid");
        
$cats_ids[$link->getVar("tag_catid")] = $link->getVar("tag_catid");
        
$mods_ids[$link->getVar("tag_modid")] = $link->getVar("tag_modid");
        
$obj = $tags_handler->get($link->getVar("tag_id"));
        
$tags[$obj->getVar('tag_term')] = array("tag_id" => $obj->getVar('tag_id'), "tag_itemid" => $link->getVar("tag_itemid"));
    }
    
    
$criteria = new CriteriaCompo(new Criteria("o.tag_itemid", "(" . implode(", ", $items_ids) . ")", "IN"));
    
$criteria->setOrder('RAND()');
    if (!empty(
$mods_ids)) {
        
$criteria->add( new Criteria("o.tag_modid", "(" . implode(", ", $mods_ids) . ")", "IN"));
        if (!empty(
$cats_ids)) {
            
$criteria->add( new Criteria("o.tag_catid", "(" . implode(", ", $cats_ids) . ")", "IN"));
        }
    }
    
$items = $tags_handler->getItems($criteria); // Tag, imist, start, sort, order, modid, catid
    
$items_module = array();
    
$modules_obj = array();
    if (!empty(
$items)) {
        foreach (
array_keys($items) as $key) {
            
$items_module[$items[$key]["modid"]][$items[$key]["itemid"]] = $tags_handler->getByItem($items[$key]["itemid"], $items[$key]["modid"], $items[$key]["catid"]);
        }
        
$module_handler =& xoops_gethandler('module');
        
$modules_obj = $module_handler->getObjects(new Criteria("mid", "(" . implode(", ", array_keys($modids)) . ")", "IN"), true);
        foreach (
array_keys($modules_obj) as $mid) {
            try {
                    
                
$dirname = $modules_obj[$mid]->getVar("dirname", "n");
                
xoops_loadLanguage('modinfo', $dirname);
                
                
// Return related item infomation: title, content, time, uid, all tags
                
foreach(array_keys($items_module[$mid]) as $identy)
                {
                    switch (
$dirname)
                    {
                        case 
"xforum":
                            
$post_handler = xoops_getmodulehandler('post', $dirname);
                            
$post = $post_handler->get($identy);
                            if (
is_object($post))
                            {
                                
$results[$base = root_tag($items_module[$mid][$identy], array_keys($tags))][$identy]['title'] = $post->getVar('subject');
                                
$results[$base][$identy]['url'] = $post->getURL();
                                foreach(
$items_module[$mid][$identy] as $tag_id => $tag)
                                if (!
in_array($tag, $tags))
                                    
$results[$base][$identy]['plus'][$tag_id] = $tag;
                            }
                            break;
                        case 
"xcenter":
                            require_once(
$GLOBALS['xoops']->path(_XTR_PATH_PHP_FUNCTIONS));
                            
$content_handler = xoops_getmodulehandler('xcenter', $dirname);
                            
$post = $content_handler->getContent($identy);
                            if (
is_object($post))
                            {
                                
$results[$base = root_tag($items_module[$mid][$identy], array_keys($tags))][$identy]['title'] = $post['title']->getVar('title');
                                
$results[$base][$identy]['url'] = XOOPS_URL . "/modules/$dirname/?storyid=$identy";
                                foreach(
$items_module[$mid][$identy] as $tag_id => $tag)
                                if (!
in_array($tag, $tags))
                                    
$results[$base][$identy]['plus'][$tag_id] = $tag;
                            }
                            break;
                    }
                }
                
            }
            catch (
Exception $e) { echo "$e<br/>"; }
        }
    }
    
header('Origin: *');
    
header('Access-Control-Allow-Origin: *');
    
header('Context-type: application/json');
    echo 
json_encode($results);
    exit(
0);
    
    function 
root_tag($res = array(), $tags = array())
    {
        foreach(
$res as $id => $tag)
            if (
in_array($tag, $tags))
                return 
$tag;
    }
?>

[size=large]WORDPRESS - (With Categories & Tags Lookup)[/size]

[font=Courier][size=x-large][color=006633]This example is retrieving the pages with tag categories to receive a dial-able file for crons to find categories of content like a journal for suggestion of links on twitter like where this file is from http://simonaroberts.com/tweetable.php..[/color][/size][/font]


[code]
<?php

/**
 *  Xoops Functions
 *
 * You may not change or alter any portion of this comment or credits
 * of supporting developers from this source code or any supporting source code
 * which is considered copyrighted (c) material of the original comment or credit authors.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * @copyright       The XOOPS Project http://sourceforge.net/projects/xoops/
 * @license         GNU GPL 2 (http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
 * @package         kernel
 * @since           2.5.7
 * @version         $Id: tweetables.php XXXXX XXXX-XX-XX XX:XX:XXZ xxxxxx $
 */ 
    
require_once( dirname(__FILE__) . '/wp-load.php' );
    
$results = array();
    
$objects = $wpdb->get_results("SELECT tr.object_id, tt.term_id, tt.count, tm.name FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id INNER JOIN $wpdb->terms AS tm ON tm.term_id = tt.term_id WHERE tt.taxonomy IN ('category', 'post_tag') ORDER BY RAND() LIMIT 10");
    foreach(
$objects as $object)
    {
        
$posts = (array)get_objects_in_term($object->term_id, array('category', 'post_tag'));
        foreach(
$posts as $id => $post_id) 
        {

            
$post = get_post($post_id, 'ARRAY');
            
$results[$object->name][$post_id]['title'] = $post->post_title;
            
$results[$object->name][$post_id]['url'] = get_option('home') . "?p=$post_id";
            foreach(
wp_get_object_terms($post_id, array('category', 'post_tag')) as $term)
                if (
$term->name!=$object->name)
                    
$results[$object->name][$post_id]['plus'][$term->term_id] = $term->name;
        }
            
    }
    
header('Origin: *');
    
header('Access-Control-Allow-Origin: *');
    
header('Context-type: application/json');
    echo 
json_encode($results);
    exit(
0);
?>

2
wishcraft
Cron1://replies.diz - tweetable.php to dial for replies -- forums, tag's categories!!

PHP - Linux - (With tag's,categories!! Lookup)

This example shows the data file stored on the remote system running the cron, this is a flat text file with Linux Page break for service://replies.diz

File Contents -:SourceOpen|http://Part1-remote-tweetables.php|minimumlot-maximumlot\n
@Cipherocity|http://cipher.labs.coop/tweetable.php|8-13
@hempembassy|http://hempembassy.net/tweetable.php|7-21

3
wishcraft
Cron2://retweets.diz - tweetable.php to dial for replies -- forums, tag's categories!!

PHP - Linux - (With tag's,categories!! Lookup)

This example shows the data file stored on the remote system running the cron, this is a flat text file with Linux Page break for service://retweets.diz

File Contents -:SearchTerm|minimumlot-maximumlot\n
Cipherocity|11-19
ChronolabsCoop
|6-13
PublicHoneypot
|6-13
AusPol
|2-5

4
wishcraft
Cron3://TwitterAPIExchange.php - tweetable.php to dial for replies -- forums, tag's categories!!

PHP - Linux - (With tag's,categories!! Lookup)

This example shows a class for talking to the Twitter API 1.1 on twitter with an application with write mode enabled set up as an application token system with http://apps.twitter.com

<?php

/**
 * Twitter-API-PHP : Simple PHP wrapper for the v1.1 API
 * 
 * PHP version 5.3.10
 * 
 * @category Awesomeness
 * @package  Twitter-API-PHP
 * @author   James Mallison <me@j7mbo.co.uk>
 * @license  MIT License
 * @link     http://github.com/j7mbo/twitter-api-php
 */
class TwitterAPIExchange
{
    private 
$oauth_access_token;
    private 
$oauth_access_token_secret;
    private 
$consumer_key;
    private 
$consumer_secret;
    private 
$postfields;
    private 
$getfield;
    protected 
$oauth;
    public 
$url;

    
/**
     * Create the API access object. Requires an array of settings::
     * oauth access token, oauth access token secret, consumer key, consumer secret
     * These are all available by creating your own application on dev.twitter.com
     * Requires the cURL library
     * 
     * @param array $settings
     */
    
public function __construct(array $settings)
    {
        if (!
in_array('curl', get_loaded_extensions())) 
        {
            throw new 
Exception('You need to install cURL, see: http://curl.haxx.se/docs/install.html');
        }
        
        if (!isset(
$settings['oauth_access_token'])
            || !isset(
$settings['oauth_access_token_secret'])
            || !isset(
$settings['consumer_key'])
            || !isset(
$settings['consumer_secret']))
        {
            throw new 
Exception('Make sure you are passing in the correct parameters');
        }

        
$this->oauth_access_token = $settings['oauth_access_token'];
        
$this->oauth_access_token_secret = $settings['oauth_access_token_secret'];
        
$this->consumer_key = $settings['consumer_key'];
        
$this->consumer_secret = $settings['consumer_secret'];
    }
    
    
/**
     * Set postfields array, example: array('screen_name' => 'J7mbo')
     * 
     * @param array $array Array of parameters to send to API
     * 
     * @return TwitterAPIExchange Instance of self for method chaining
     */
    
public function setPostfields(array $array)
    {
        if (!
is_null($this->getGetfield())) 
        { 
            throw new 
Exception('You can only choose get OR post fields.'); 
        }
        
        if (isset(
$array['status']) && substr($array['status'], 0, 1) === '@')
        {
            
$array['status'] = sprintf("%s", $array['status']);
        }
        
        
$this->postfields = $array;
        
        return 
$this;
    }
    
    
/**
     * Set getfield string, example: '?screen_name=J7mbo'
     * 
     * @param string $string Get key and value pairs as string
     * 
     * @return TwitterAPIExchange Instance of self for method chaining
     */
    
public function setGetfield($string)
    {
        if (!
is_null($this->getPostfields())) 
        { 
            throw new 
Exception('You can only choose get OR post fields.'); 
        }
        
        
$search = array('#', ',', '+', ':');
        
$replace = array('%23', '%2C', '%2B', '%3A');
        
$string = str_replace($search, $replace, $string);  
        
        
$this->getfield = $string;
        
        return 
$this;
    }
    
    
/**
     * Get getfield string (simple getter)
     * 
     * @return string $this->getfields
     */
    
public function getGetfield()
    {
        return 
$this->getfield;
    }
    
    
/**
     * Get postfields array (simple getter)
     * 
     * @return array $this->postfields
     */
    
public function getPostfields()
    {
        return 
$this->postfields;
    }
    
    
/**
     * Build the Oauth object using params set in construct and additionals
     * passed to this method. For v1.1, see: https://dev.twitter.com/docs/api/1.1
     * 
     * @param string $url The API url to use. Example: https://api.twitter.com/1.1/search/tweets.json
     * @param string $requestMethod Either POST or GET
     * @return TwitterAPIExchange Instance of self for method chaining
     */
    
public function buildOauth($url, $requestMethod)
    {
        if (!
in_array(strtolower($requestMethod), array('post', 'get')))
        {
            throw new 
Exception('Request method must be either POST or GET');
        }
        
        
$consumer_key = $this->consumer_key;
        
$consumer_secret = $this->consumer_secret;
        
$oauth_access_token = $this->oauth_access_token;
        
$oauth_access_token_secret = $this->oauth_access_token_secret;
        
        
$oauth = array( 
            
'oauth_consumer_key' => $consumer_key,
            
'oauth_nonce' => time(),
            
'oauth_signature_method' => 'HMAC-SHA1',
            
'oauth_token' => $oauth_access_token,
            
'oauth_timestamp' => time(),
            
'oauth_version' => '1.0'
        
);
        
        
$getfield = $this->getGetfield();
        
        if (!
is_null($getfield))
        {
            
$getfields = str_replace('?', '', explode('&', $getfield));
            foreach (
$getfields as $g)
            {
                
$split = explode('=', $g);
                
$oauth[$split[0]] = $split[1];
            }
        }
        
        
$base_info = $this->buildBaseString($url, $requestMethod, $oauth);
        
$composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
        
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
        
$oauth['oauth_signature'] = $oauth_signature;
        
        
$this->url = $url;
        
$this->oauth = $oauth;
        
        return 
$this;
    }
    
    
/**
     * Perform the actual data retrieval from the API
     * 
     * @param boolean $return If true, returns data.
     * 
     * @return string json If $return param is true, returns json data.
     */
    
public function performRequest($return = true)
    {
        if (!
is_bool($return)) 
        { 
            throw new 
Exception('performRequest parameter must be true or false'); 
        }
        
        
$header = array($this->buildAuthorizationHeader($this->oauth), 'Expect:');
        
        
$getfield = $this->getGetfield();
        
$postfields = $this->getPostfields();

        
$options = array( 
            
CURLOPT_HTTPHEADER => $header,
            
CURLOPT_HEADER => false,
            
CURLOPT_URL => $this->url,
            
CURLOPT_RETURNTRANSFER => true,
            
CURLOPT_TIMEOUT => 10,
        );

        if (!
is_null($postfields))
        {
            
$options[CURLOPT_POSTFIELDS] = $postfields;
        }
        else
        {
            if (
$getfield !== '')
            {
                
$options[CURLOPT_URL] .= $getfield;
            }
        }

        
$feed = curl_init();
        
curl_setopt_array($feed, $options);
        
$json = curl_exec($feed);
        
//var_dump($options);
        //print_r(curl_getinfo($feed), true);
        
        
curl_close($feed);

        if (
$return) { return $json; }
    }
    
    
/**
     * Private method to generate the base string used by cURL
     * 
     * @param string $baseURI
     * @param string $method
     * @param array $params
     * 
     * @return string Built base string
     */
    
private function buildBaseString($baseURI, $method, $params) 
    {
        
$return = array();
        
ksort($params);
        
        foreach(
$params as $key=>$value)
        {
            
$return[] = "$key=" . $value;
        }
        
        return 
$method . "&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $return)); 
    }
    
    
/**
     * Private method to generate authorization header used by cURL
     * 
     * @param array $oauth Array of oauth data generated by buildOauth()
     * 
     * @return string $return Header used by cURL for request
     */    
    
private function buildAuthorizationHeader($oauth) 
    {
        
$return = 'Authorization: OAuth ';
        
$values = array();
        
        foreach(
$oauth as $key => $value)
        {
            
$values[] = "$key="" . rawurlencode($value) . """;
        }
        
        
$return .= implode(', ', $values);
        return 
$return;
    }

}

5
wishcraft
Cron4://cron-twits.php - Executable CronJob or Sceduduled Task -- forums, tag's categories!!

Executable CronJob or Sceduduled Task -- forums, tag's categories!!


<?php
/**
 *  Xoops Functions
 *
 * You may not change or alter any portion of this comment or credits
 * of supporting developers from this source code or any supporting source code
 * which is considered copyrighted (c) material of the original comment or credit authors.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * @copyright       The XOOPS Project http://sourceforge.net/projects/xoops/
 * @license         GNU GPL 2 (http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
 * @package         crons
 * @since           2.5.7
 * @version         $Id: cron-twits.php XXXXX XXXX-XX-XX XX:XX:XXZ xxxxxx $
 */ 

error_reporting(E_ERROR);
set_time_limit(2999);
ini_set('display_errors', 1);
ini_set('error_log', dirname(__FILE__) . DIRECTORY_SEPARATOR . "errors.txt");
require_once(
dirname(__FILE__) . DIRECTORY_SEPARATOR . "TwitterAPIExchange.php");
/**
 * Gets a response from a URL with cURL or wGET
 * @param string $url
 * @param array $params
 * @param string $context
 * @param array $header
 * @param string $method
 * @return string|mixed|boolean
 */
function getURL($url, $params, $context = '', $header = array(), $method = 'GET') {
    if (!
function_exists('curl_init')||$method=='FGC') {
        
$url .= '?'.http_build_query($params);
        
$data = file_get_contents( $url, 0, $context );
        return 
$data;
    } else {
        if (
$ch = curl_init()) {
            if (!
is_array($header))
                
$header = explode("n", str_replace("r", "", $header));
            if (
count($header)>0)
                
curl_setopt($ch,CURLOPT_HTTPHEADER, $header);
            switch(
$method) {
                default:
                case 
'GET':
                    
$url .= '?'.http_build_query($params);
                    break;
                case 
'POST':
                    
curl_setopt($ch, CURLOPT_POST, 1);
                    
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
            }
            
curl_setopt($ch, CURLOPT_URL, $url);
            
//curl_setopt($ch, CURLOPT_HEADER, 1);
            
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, 0);
            
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            
curl_setopt($ch, CURLOPT_USERAGENT, 'Chronolabs Translation API 1.02 - PHP Version ' . PHP_VERSION.'');
            
$data = curl_exec($ch);
            
curl_close($ch);
            return 
$data;
        }
    }
    return 
false;
}
error_reporting(E_ERROR);
$settings['twitter']['Cipherocity'] = array(
        
'oauth_access_token' => "----------------------------------------------------",
        
'oauth_access_token_secret' => ""----------------------------------------------------",
        'consumer_key' => ""----------------------------------------------------"
,
        
'consumer_secret' => ""----------------------------------------------------"
);
define("
_REPLY", "@%s topic similar %s this article %s entitled: '%s'");
mt_srand(mt_rand(-microtime(true), microtime(true)));
mt_srand(mt_rand(-microtime(true), microtime(true)));
mt_srand(mt_rand(-microtime(true), microtime(true)));
mt_srand(mt_rand(-microtime(true), microtime(true)));
error_reporting(E_ERROR);
include_once dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "
web" . DIRECTORY_SEPARATOR . "public_html" . DIRECTORY_SEPARATOR . "mainfile.php";
if (isset(
$GLOBALS['xoops']))
    include_once 
$GLOBALS['xoops']->path("/class/cache/xoopscache.php");
ini_set('display_errors', 1);
ini_set('error_log', dirname(__FILE__) . DIRECTORY_SEPARATOR . "
errors.txt");
error_reporting(E_ERROR);

foreach (
$settings['twitter'] as $key => $setting) {
    
$tweets = array();
    foreach(file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'retweet.diz') as 
$id => $line)
    {
        
$parts = explode("|", $line);
        
$range = explode("-", $parts[1]);
        
$searchfor[$id][$parts[0]] = mt_rand($range[0], $range[1]);
    }
    foreach(
$searchfor as $term => $count) {
        if (defined('XOOPS_ROOT_PATH'))
            if (!
$results = XoopsCache:: read('tweetercron_'.str_replace(' ', '_', strtolower($term)))) {
                
$results = array('since_id'=>0);
            }
        else
            
$results = array('since_id'=>0);
        
$url = 'https://api.twitter.com/1.1/search/tweets.json';
        
$getfield = '?q='.urlencode($term).'&'.($result['since_id']!=0?'since_id='.$result['since_id'].'&':'').'result_type=mixed&count='.$count;
        
$postfields = array();
        
$requestMethod = 'GET';
        
$twitter = new TwitterAPIExchange($setting);
        
$tweets[] = array_merge(json_decode($twitter    ->setGetfield($getfield)
                                                        ->buildOauth(
$url, $requestMethod)
                                                        ->performRequest(), true), array('count' => 
$count));
    }            
    foreach(
$tweets as $keyb => $tweet) 
    {
        if (
$tweet['user']['screen_name'] != $key) 
        {
            if (is_array(
$tweet)&&!empty($tweet)) 
            {
                
$count = $tweet['count'];
                
$keys = array_keys($tweet);
                while(count(
$tweet)>$count) {
                    
$key = $keys[mt_rand(0, count($keys)-1)];
                    unset(
$tweet[$key]);
                    unset(
$keys[$key]);
                }
                foreach(
$tweet as $key => $values) 
                {
                    if (
$values['user']['screen_name'] != $key) 
                    {
                        switch (
$key) 
                        {
                            case 'statuses':
                                foreach(
$values as $keyb => $valuesb) 
                                {

                                    
$url = 'https://api.twitter.com/1.1/statuses/retweet/'.$valuesb['id_str'].'.json';
                                    
$requestMethod = 'POST';
                                    
$postfields = array();
                                    
$twitter = new TwitterAPIExchange($setting);
                                    
$retweets[] = json_decode($twitter    ->buildOauth($url, $requestMethod)
                                                                        ->setPostfields(
$postfields)
                                                                        ->performRequest(), true);
                                    echo "
Retweeted: " . ($last = $valuesb['id_str']) . " :: " . $valuesb['text'] . "</br>";
                                }
                                if (defined('XOOPS_ROOT_PATH') && class_exists("
XoopsCache"))
                                    XoopsCache::write('tweetercron_'.str_replace(' ', '_', strtolower(
$term)), array('since_id'=>$last));
                                break;
                            case 'search_metadata':
                                if (defined('XOOPS_ROOT_PATH') && class_exists("
XoopsCache"))
                                    XoopsCache::write('tweetercron_'.str_replace(' ', '_', strtolower(
$term)), array('since_id'=>$values['since_id']));
                                break;
                        }
                    }
                }
            }
        }
    }
        
    
$tweets = array();
    
$searchfor = array();
    
$resulters = array();
    foreach(file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'replies.diz') as 
$id => $line)
    {
        
$parts = explode("|", $line);
        
$range = explode("-", $parts[2]);
        foreach(json_decode(getURL(
$parts[1]), true) as $term => $data) 
            
$searchfor[$term][mt_rand($range[0], $range[1])] = array_merge($data, array("suffix" => $parts[0]));
    }
    foreach(
$searchfor as $tterm => $resource) 
    {
        
$skip = false;
        foreach(
$resource as $count => $data)
        {
            if (
$skip != true)
            {
                foreach(
$data as $identy => $termset) 
                {
                    if (
$skip != true)
                    {
                        
$secondary = $termidor = array_merge(explode(" ", $termset["title"]), $termset['plus']);
                        shuffle(
$termidor);
                        shuffle(
$termidor);
                        shuffle(
$termidor);
                        shuffle(
$termidor);
                        shuffle(
$termidor);
                        shuffle(
$secondary);
                        shuffle(
$secondary);
                        shuffle(
$secondary);
                        shuffle(
$secondary);
                        shuffle(
$secondary);    
                        foreach(
$termidor as $tteerm) {                
                            foreach(
$secondary as $stteerm)
                            {
                                if (
$skip != true && $stteerm != $tteerm)
                                {
                                    
$resulters[$term = $tterm . " " . $tteerm . " " . $stteerm] = array('title' => $termset['title'], 'url' => $termset['url'], 'count' => $count);                        
                                    if (defined('XOOPS_ROOT_PATH'))
                                        if (!
$results = XoopsCache:: read('twitscron_'.str_replace(' ', '_', strtolower($term)))) {
                                            
$results = array('since_id'=>0);
                                        }
                                    else
                                        
$results = array('since_id'=>0);
        
                                    
$url = 'https://api.twitter.com/1.1/search/tweets.json';
                                    
$getfield = '?q='.urlencode($term).'&'.($result['since_id']!=0?'since_id='.$result['since_id'].'&':'').'result_type=mixed&count='.$count;
                                    
$postfields = array();
                                    
$requestMethod = 'GET';
                                    
$twitter = new TwitterAPIExchange($setting);
                                    
$rrt = $rrt + count($tweets[$term][$termset['suffix']][] = json_decode($twitter    ->setGetfield($getfield)
                                            ->buildOauth(
$url, $requestMethod)
                                            ->performRequest(), true));
                                    if (
$rrt >= $count)
                                        
$skip = true;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
$keys = array_keys($resulters);
    shuffle(
$keys);
    shuffle(
$keys);
    shuffle(
$keys);
    shuffle(
$keys);
    shuffle(
$keys);
    foreach(
$keys as $term) {
        foreach(
$tweets[$term] as $suffix => $twits) {
            foreach(
$twits as $keyb => $tweet) {
                if (
$tweet['user']['screen_name'] != $key) {
                    if (is_array(
$tweet)&&!empty($tweet)) {
                        
$number = 0;
                        
$count = $resulters[$term]['count'];
                        
$keys = array_keys($tweet);
                        while(count(
$tweet)>$count) {
                            
$key = $keys[mt_rand(0, count($keys)-1)];
                            unset(
$tweet[$key]);
                            unset(
$keys[$key]);
                        }
                        if (!count(
$tweet['errors']))
                        {
                            foreach(
$tweet as $key => $values) {
                                if (
$values['user']['screen_name'] != $key) {
                                    switch (
$key) {
                                        case 'statuses':
                                            foreach(
$values as $keyb => $valuesb) {
                                                
                                                    
$geoRand = json_decode(getURL("http://places.labs.coop/v1/random/random/json.api"), true);
                                                    
$url = 'https://api.twitter.com/1.1/statuses/update.json';
                                                    
$requestMethod = 'POST';
                                                    
$res = sprintf(_REPLY, $valuesb['user']['screen_name'], $suffix, $resulters[$term]['url'], $resulters[$term]['title']);
                                                    
$postfields = array('status' => $res, 'in_reply_to_status_id' => $valuesb['id_str'], 'possibly_sensitive' => 'true', 'lat' => (float)$geoRand['place']["Latitude_Float"], 'long' => (float)$geoRand['place']["Longitude_Float"], 'display_coordinates' => 'true');
                                                    
$twitter = new TwitterAPIExchange($setting);
                                                    
$retweets[] = json_decode($twitter    ->buildOauth($url, $requestMethod)
                                                            ->
setPostfields($postfields)
                                                            ->
performRequest(), true);
                                                    echo 
"Reply: " . ($last = $valuesb['id_str']) . " :: " . $res . "</br>";
                                                    
$number++;
                                            }
                                            if (
defined('XOOPS_ROOT_PATH') && class_exists("XoopsCache"))
                                                
XoopsCache::write('twitscron_'.str_replace(' ', '_', strtolower($term)), array('since_id'=>$last));
                                            break;
                                        case 
'search_metadata':
                                            if (
defined('XOOPS_ROOT_PATH') && class_exists("XoopsCache"))
                                                
XoopsCache::write('twitscron_'.str_replace(' ', '_', strtolower($term)), array('since_id'=>$values['since_id']));
                                            break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    
    
$url = 'https://api.twitter.com/1.1/followers/ids.json';
    
$getfield = 'cursor=-1&screen_name='.$key.'&count=5000';
    
$requestMethod = 'GET';
    
$postfields = array();
    
$twitter = new TwitterAPIExchange($setting);
    
$friends = $twitter    ->setGetfield($getfield)
                         ->
buildOauth($url, $requestMethod)
                        ->
performRequest();

    if (isset(
$friends['ids'])) {
        foreach(
$friends['ids'] as $id) {
            
$url = 'https://api.twitter.com/1.1/friendships/create.json ';
            
$requestMethod = 'POST';
            
$postfields = array('user_id'=>$id, 'follow'=>true);
            
$twitter = new TwitterAPIExchange($setting);
            
$friends = $twitter    ->buildOauth($url, $requestMethod)
                                ->
setPostfields($postfields)
                                ->
performRequest();        
        }
    }
}

?>