Log in

View Full Version : How do I put RSS results into one post not seperate thread?


liquidrage
09-02-2006, 01:28 PM
This is for the built in RSS manager in 3.6

What I would like to do is on a scheduled basis run an RSS feed and put all the results from the RSS feed into one post in one thread, have it be stickied, and then unsticky the previous thread.

Now, basically, I figure I can do this in mySQL by putting the RSS feed results into a hidden forum where it puts each result into it's own thread, running a scheduled sql job that selects the text from the posts in the forum, formats into one post, creates a post in the real forum, stickies the post, unstickies the previous one, and then deletes all the threads in the hidden forum.

But since this seems like something others would have liked done I'm hoping there's already something out there for this.
Plus, it seems like the plan I have using sql is going to have issues with fetching old posts, so I would need some tweaking to the plan.

Any advice on accomplishing this would be appreciated.

Thanks....

//Update since no one seems to have a pre-existing solution..............................
Basically, what I've come up with is to have the posts from the 3.6 RSS manager be defaulted as sticky threads in the hidden forum. Once a day, in the morning the schuleded task runs, grabbing the text from all sticky threads and combining the texts from all sticky threads in the hidden forum into one post, one thread, in the desired forum.
Then, lastly, my script updates the hidden forum making all posts non-sticky.
This gets around the problem the RSS manager has in keeping track.

It's certainly not elegant (shoot I've only been playing around with vB for about 2 weeks, and I'm not normally using PHP at work), but it works.

I can post a script to run if anyone's interested.

Rik Brown
09-08-2006, 07:35 PM
I can post a script to run if anyone's interested.

Yes, I would be interested. I've got a similar project in mind and that certainly would speed the work up.

Thanks in advance. -- Rik

liquidrage
09-09-2006, 02:38 PM
Save this code as a php file and put it your forums directory. Then just create a schedule task in the admin control panel that runs this php script.

All the values you need to change are uptop in the declarations section.


<?php

//************************************************** *****
//DECLARATIONS
//************************************************** *****
$sourceForumid = '37';
$insertForumid = '4';
$postShortTitle = "What you want the thread to be called";
$postTitle = postShortTitle . date("Y/m/d");
$postUID = '1';
$postUName = 'AccountName';
$dbname = "yourDataBasesName.";


//************************************************** *****
//GATHER VALUES FOR NEW THREAD
//************************************************** *****
$posts = $vbulletin->db->query_read("SELECT t.threadid, t.forumid, p.title, p.pagetext
FROM " . $dbname . "thread t
INNER JOIN " . $dbname . "post p ON p.threadid = t.threadid
WHERE t.forumid = " . $sourceForumid . " AND sticky = 1;");

$newpost = "";

while ($thispost = $vbulletin->db->fetch_array($posts))
{
$newpost = $newpost . "" . $thispost['title'] . " \n" . $thispost['pagetext'] . "\n" . "\n" . "\n" . "\n";
}

//CHECK TO SEE IF WE HAVE POSTS TO MAKE NEW THREAD WITH
if ($newpost != "")
{

//UNSTICKY PREVIOUS NEWS THREAD
$threadid = $vbulletin->db->query_read("
UPDATE " . $dbname . "thread
SET sticky = '0' WHERE
forumid = '" . $insertForumid . "' AND title LIKE '" . $postShortTitle . "%'
");

//CREATE NEW THREAD
$threadid = $vbulletin->db->query_read("
INSERT INTO " . $dbname . "thread
(title,forumid,dateline,open,lastpost,postuserid,v isible,postusername,lastposter,sticky)
VALUES
('" . $postTitle . "','" . $insertForumid . "','" . TIMENOW . "','1'
,'" . TIMENOW . "','" . $postUID . "','1','" . $postUName . "','" . $postUName . "','1')
");


$insertid = mysql_insert_id();

//CREATE POST FOR THAT THREAD
$newpost = str_replace("'","''",$newpost);

$threadid = $vbulletin->db->query_read("
INSERT INTO " . $dbname . "post
(threadid,username,userid,visible,pagetext,datelin e)
VALUES
('" . $insertid . "','" . $postUName . "','" . $postUID . "','1','" . $newpost . "'," . TIMENOW . " )
");

$postid = mysql_insert_id();

//UPDATE THREAD INFO
$threadid = $vbulletin->db->query_read("
UPDATE " . $dbname . "thread
SET firstpostid = '" . $postid . "', lastpostid = '" . $postid . "' WHERE
threadid = '" . $insertid . "'
");


//UNSTICKY OLD THREADS
$threadid = $vbulletin->db->query_read("
UPDATE " . $dbname . "thread
SET sticky = '0' WHERE
forumid = '" . $sourceForumid . "'
");

$threadinfo = fetch_threadinfo($insertid);

require_once(DIR . '/includes/functions_databuild.php');
build_forum_counters($threadinfo['forumid']);

}





?>


Again, I don't claim this is the most elegant way to do it. But it's been running on my site with no problems for several days now. It uses a hidden forum that the RSS feeds into where it makes them sticky, takes all the stickies and moves them into one thread in the target forum, then unstickies the old posts.

Rik Brown
09-11-2006, 10:17 PM
Liquidrage:

I'll give a try. Thanks a lot. -- Rik