2011-02-21, 08:58 PM
(2011-01-07, 11:38 PM)TheGodFather Wrote: [ -> ]vbgamer, can you mask the feed url with the read more.... or continue..... text?
is it possible?
(2011-01-07, 11:38 PM)TheGodFather Wrote: [ -> ]vbgamer, can you mask the feed url with the read more.... or continue..... text?
$table->construct_cell($lang->rssfeedposter_feedurl);
$table->construct_cell('<input type="text" size="50" name="feedposter_feedurl" value="' . $feedposter_feedurl. '" />');
$table->construct_row();
to this? $table->construct_cell($lang->rssfeedposter_feedurl);
$table->construct_cell('<a href="' . $feedposter_feedurl. '">Read More...</a>');
$table->construct_row();
case "LINK":
$context['feeditems'][$feedcount]['link'] .= $data;
case "LINK":
$data = trim($data);
$context['feeditems'][$feedcount]['link'] .= $data;
IF (empty($data) && isset($tag_attrs['HREF']))
$context['feeditems'][$feedcount]['link'] .= $tag_attrs['HREF'];
<?php
/*
RSS Feed Poster
by: vbgamer45
http://www.mybbhacks.com
Copyright 2010 MyBBHacks.com
############################################
License Information:
Links to http://www.mybbhacks.com must remain unless
branding free option is purchased.
#############################################
*/
$feedcount = 0;
$maxitemcount = 0;
$tag = '';
$tag_attrs = '';
$insideitem = false;
$depth = array();
function verify_rss_url($url)
{
global $txt, $depth;
// Rss Data storage
$finalrss = '';
$failed = true;
$fp2 = @fopen($url, "r");
if ($fp2)
{
$failed = false;
$contents = '';
while (!feof($fp2))
{
$contents .= fread($fp2, 8192);
}
fclose($fp2);
$finalrss = $contents;
}
if($failed == true)
{
$url_array = parse_url($url);
$fp = @fsockopen($url_array['host'], 80, $errno, $errstr, 30);
if (!$fp)
{
}
else
{
$failed = false;
$out = "GET " . $url_array['path'] . (@$url_array['query'] != '' ? '?' . $url_array['query'] : '') . " HTTP/1.1\r\n";
$out .= "Host: " . $url_array['host'] . "\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$rssdata = '';
$header = '';
// Remove stupid headers.
do
{
$header .= fgets ($fp, 128 );
} while ( strpos($header, "\r\n\r\n" ) === false );
while (!feof($fp))
{
$rssdata .= fgets($fp, 128);
}
fclose($fp);
@$finalrss = @$rssdata;
}
}
// Use cURL
if($failed == true)
{
if(function_exists("curl_init"))
{
$failed = false;
// Last but not least try cUrl
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// grab URL, and return output
$output = curl_exec($ch);
// close curl resource, and free up system resources
curl_close($ch);
return $output;
}
}
// XML Parser functions to verify the XML Feed
if($failed == false)
{
$depth = array();
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement2", "endElement2");
if (!xml_parse($xml_parser, $finalrss)) {
fatal_error(sprintf($txt['feedposter_err_xmlerror'],
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)), false);
}
xml_parser_free($xml_parser);
}
else
{
// We were not able to download the feed :(
}
}
function startElement2($parser, $name, $attrs)
{
global $depth;
$depth[$parser]++;
}
function endElement2($parser, $name)
{
global $depth;
$depth[$parser]--;
}
function UpdateRSSFeedBots($task)
{
global $db, $context, $feedcount, $maxitemcount, $insideitem, $tag, $tag_attrs;
// First get all the enabled bots
$context['feeds'] = array();
$request = $db->write_query("
SELECT
ID_FEED, fid, feedurl, title, postername, updatetime, enabled, html,
uid, locked, articlelink, topicprefix, numbertoimport, importevery, markasread
FROM ".TABLE_PREFIX."feedbot
WHERE enabled = 1");
while ($row = $db->fetch_array($request))
{
$context['feeds'][] = $row;
}
require_once MYBB_ROOT."inc/datahandlers/post.php";
// Check if a field expired
foreach ($context['feeds'] as $key => $feed)
{
$current_time = time();
// If the feedbot time to next import has expired
//add_task_log($task, "Check " . ($current_time + (60 * $feed['importevery'])) . " :" . $feed['updatetime']);
if ($current_time > $feed['updatetime'])
{
$feeddata = GetRSSData($feed['feedurl']);
if ($feeddata != false)
{
// Process the XML
$xml_parser = xml_parser_create();
$context['feeditems'] = array();
$feedcount = 0;
$maxitemcount = $feed['numbertoimport'];
$tag = '';
$tag_attrs = '';
$insideitem = false;
$context['feeditems'][0] = array();
$context['feeditems'][0][] = array();
$context['feeditems'][0]['title'] = '';
$context['feeditems'][0]['description'] = '';
$context['feeditems'][0]['link'] = '';
xml_set_element_handler($xml_parser, "startElement1", "endElement1");
xml_set_character_data_handler($xml_parser, "characterData1");
if (!xml_parse($xml_parser, $feeddata))
{
// Error reading xml data
xml_parser_free($xml_parser);
}
else
{
// Data must be valid lets extra some information from it
// RSS Feeds are a list of items that might contain title, description, and link
// Free the xml parser memory
xml_parser_free($xml_parser);
// Loop though all the items
$myfeedcount = 0;
for ($i = 0; $i < ($feedcount); $i++)
{
if ($myfeedcount >= $maxitemcount)
{
continue;
}
//add_task_log($task, "NotSkip: $myfeedcount : $maxitemcount : $feedcount T:" . $context['feeditems'][$i]['title']);
// Check feed Log
// Generate the hash for the log
if(!isset($context['feeditems'][$i]['title']) || !isset($context['feeditems'][$i]['description']))
continue;
if(empty($context['feeditems'][$i]['title']) && empty($context['feeditems'][$i]['description']))
continue;
$itemhash = md5($context['feeditems'][$i]['title'] . $context['feeditems'][$i]['description']);
$request = $db->write_query("
SELECT
feedtime
FROM ".TABLE_PREFIX."feedbot_log
WHERE feedhash = '$itemhash'");
// If no has has found that means no duplicate entry
if ($db->num_rows($request) == 0)
{
// Create the Post
$msg_title = ($feed['html'] ? $context['feeditems'][$i]['title'] : strip_tags($context['feeditems'][$i]['title']));
$msg_body = ($feed['html'] ? $context['feeditems'][$i]['description'] . "\n\n" . $context['feeditems'][$i]['link'] : strip_tags($context['feeditems'][$i]['description'] . "\n\n" . $context['feeditems'][$i]['link']));
$posthandler = new PostDataHandler("insert");
$posthandler->action = "thread";
if (strlen($msg_title) > 120)
$msg_title = substr($msg_title,0,115);
$msg_title = trim($msg_title);
$new_thread = array(
"fid" => $feed['fid'],
"subject" => $feed['topicprefix'] . $msg_title,
"icon" => '',
"uid" => $feed['uid'],
"username" => $feed['postername'],
"message" => '[b]' . $msg_title . "[/b]\n\n" . $msg_body,
"ipaddress" => '127.0.0.1',
"posthash" => ''
);
$new_thread['modoptions'] = array('closethread' => $feed['locked']);
$posthandler->set_data($new_thread);
$valid_thread = $posthandler->validate_thread();
if(!$valid_thread)
{
$post_errors = $posthandler->get_friendly_errors();
}
else
$thread_info = $posthandler->insert_thread();
$tid = (int) $thread_info['tid'];
$pid = (int) $thread_info['pid'];
if ($feed['markasread'])
{
// Mark thread as read
require_once MYBB_ROOT."inc/functions_indicators.php";
mark_thread_read($tid, $feed['fid']);
}
// Add Feed Log
$fid = $feed['ID_FEED'];
$ftime = time();
$db->write_query("
INSERT INTO ".TABLE_PREFIX."feedbot_log
(ID_FEED, feedhash, feedtime, tid, pid)
VALUES
($fid,'$itemhash',$ftime,$tid,$pid)");
$myfeedcount++;
}
}
} // End valid XML check
} // End get feed data
// Set the RSS Feed Update time
$updatetime = time() + (60 * $feed['importevery']);
$db->write_query("
UPDATE ".TABLE_PREFIX."feedbot
SET
updatetime = '$updatetime'
WHERE ID_FEED = " . $feed['ID_FEED']);
} // End expire check
} // End for each feed
}
function GetRSSData($url)
{
$url_array = parse_url($url);
$fp2 = @fopen($url, "r");
if ($fp2)
{
$contents = '';
while (!feof($fp2))
{
$contents .= fread($fp2, 8192);
}
fclose($fp2);
return $contents;
}
$fp = fsockopen($url_array['host'], 80, $errno, $errstr, 30);
if (!$fp)
{
}
else
{
$out = "GET " . $url_array['path'] . (@$url_array['query'] != '' ? '?' . $url_array['query'] : '') . " HTTP/1.1\r\n";
$out .= "Host: " . $url_array['host'] . "\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$rssdata = '';
$header = '';
// Remove stupid headers.
do
{
$header .= fgets ($fp, 128 );
} while ( strpos($header, "\r\n\r\n" ) === false );
while (!feof($fp))
{
$rssdata .= fgets($fp, 128);
}
fclose($fp);
$finalrss = $rssdata;
return $finalrss;
}
if(function_exists("curl_init"))
{
// Last but not least try cUrl
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// grab URL, and return output
$output = curl_exec($ch);
// close curl resource, and free up system resources
curl_close($ch);
return $output;
}
// Failure return false
return false;
}
function startElement1($parser, $name, $attrs)
{
global $insideitem, $tag, $tag_attrs;
if ($insideitem)
{
$tag = $name;
$tag_attrs = $attrs;
}
elseif ($name == "ITEM" || $name == "ENTRY")
{
$insideitem = true;
}
}
function endElement1($parser, $name)
{
global $insideitem, $tag, $feedcount, $context, $tag_attrs;
if ($name == "ITEM" || $name == "ENTRY")
{
$feedcount++;
$context['feeditems'][$feedcount] = array();
$context['feeditems'][$feedcount][] = array();
$context['feeditems'][$feedcount]['title'] = '';
$context['feeditems'][$feedcount]['description'] = '';
$context['feeditems'][$feedcount]['link'] = '';
$tag_attrs = '';
$insideitem = false;
}
}
function characterData1($parser, $data)
{
global $insideitem, $tag, $feedcount, $context, $maxitemcount, $tag_attrs;
if ($insideitem )
{
switch ($tag)
{
case "TITLE":
$context['feeditems'][$feedcount]['title'] .= $data;
break;
case "DESCRIPTION":
$context['feeditems'][$feedcount]['description'] .= $data;
break;
case "LINK":
$context['feeditems'][$feedcount]['link'] .= $data;
break;
case "SUMMARY":
$context['feeditems'][$feedcount]['description'] .= $data;
break;
case "CONTENT":
$context['feeditems'][$feedcount]['description'] .= $data;
break;
case "LINK":
$data = trim($data);
$context['feeditems'][$feedcount]['link'] .= $data;
IF (empty($data) && isset($tag_attrs['HREF']))
$context['feeditems'][$feedcount]['link'] .= $tag_attrs['HREF'];
break;
}
}
}
function task_rssfeedposter($task)
{
global $lang;
$lang->load('rssfeedposter');
UpdateRSSFeedBots($task);
add_task_log($task, $lang->rssfeedposter_taskran);
}
?>