Go Back   vb.org Archive > Community Discussions > Modification Requests/Questions (Unpaid)
  #1  
Old 01-22-2013, 09:24 AM
4thstar 4thstar is offline
 
Join Date: Sep 2004
Posts: 10
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Creating a sheduled task from this code

Hello.
I have modified the code from this module to create a file i can use for an rss feed of the events calendar, i dont know php so its been a bit of reading and trial and error, theres probably a much better way to do this, but for now it seems to work.

Problem is its done as a widget so it runs on every page load, which when the site gets bigger will get higher usage on the server.

Kan i ask if anyone out there can show me how to convert the code below so it runs as a sheduled task from a cron file?

Many thanks
Carl

PHP Code:
ob_start(); 
global $db,$vbulletin; 
$calendarid="1"; 
$per_page = "60"; 
//################################################ 
$d=date("d"); 
$m=date("m"); 
$y=date("y"); 
$sdate = mktime(0, 0, 0, date("$m"), date("$d"),  date("$y")); 
$edate = mktime(0, 0, 0, date("$m"), date("31"),  date("$y")); 
$and=" and dateline_from >= '".$sdate."'"; 

$getevents=$db->query_read("SELECT eventid, event, title, customfields, dateline_from from " . TABLE_PREFIX . "event WHERE calendarid='".$calendarid."' $and order by dateline_from ASC LIMIT $per_page"); 
$count=0; 
if(!$db->num_rows($getevents)) 


else 

WHILE ($events=$db->fetch_array($getevents)) 

$eventdetails=$events['event'];
$eventdetails=substr($eventdetails, 0, 300);
$eventdetails .= "......";
$customfield=$events['customfields'];
$customfield = str_replace('a:0:{}', '', $customfield );
$customfield =strstr ($customfield, '"');
$customfield = str_replace('"', '', $customfield );
$customfield = str_replace(';}', '', $customfield );

$dtitle=$events['title']; 
$did=$events['eventid']; 
$date = vbdate('d-m-y',$events['dateline_from'], false,true,false,true); 
$dateext = vbdate('l jS F Y',$events['dateline_from'], false,true,false,true);
if ($count = 2){$class="alt2";}else {$class="alt1";} 
$year=date("Y"); 
$pagetitle = $f; 
$pagetitle .= " "; 
$pagetitle.=$year; 
$eventbits .=""; 

$dateext = htmlentities($dateext);
$eventdetails = htmlentities($eventdetails);


$eventbitsExt .="
<item>
<title>$dateext</title>
<description><![CDATA[$eventdetails]]></description>
<link><![CDATA[http://www.bidefordmarket.co.uk/calendar.php?do=getinfo&e=$did&c=$calendarid]]></link>
<guid><![CDATA[000000$did]]></guid>
<pubDate><![CDATA[$sdate]]></pubDate>
</item>
"; 
$count++; 




$bidefordmarketeventlist = "bidefordmarketeventlist.rss";
$fh = fopen($bidefordmarketeventlist, 'w') or die("can't open file");
fwrite($fh, "<?xml version='1.0' encoding='UTF-8' ?>
<rss version='2.0'>
<channel>
<title>Bideford Market Events</title>
<description>This is the RSS feed for Bideford Markets Latest Events</description>
<link>http://www.bidefordmarket.co.uk</link>
<lastBuildDate>$sdate</lastBuildDate>
<pubDate>$sdate</pubDate>
<ttl>1800</ttl>
");

//$eventbitsExt = str_replace("?", "?", $eventbitsExt);
//$eventbitsExt = str_replace("&", "&", $eventbitsExt);

$strfinda .= chr(150);
$eventbitsExt = str_replace($strfinda, " ", $eventbitsExt);


fwrite($fh, $eventbitsExt);
fwrite($fh, "</channel>
</rss>");
fclose($fh);


$db->free_result($getevents); 
unset($events); 
$output=ob_get_contents(); 
ob_end_clean();
Reply With Quote
  #2  
Old 01-22-2013, 01:28 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I'm confused reading that code - it doesn't look like there would be any output in the widget, since it all gets written to the file.

In any case, an easy way to make it a scheduled task would be to create a plugin using hook location cron_script_cleanup_daily or cron_script_cleanup_hourly (but of course then you're limited to running it once per hour or day).
Reply With Quote
  #3  
Old 01-22-2013, 02:18 PM
4thstar 4thstar is offline
 
Join Date: Sep 2004
Posts: 10
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Many thanks, yes you are correct, theres no output, other than what it writes to a file, thus at the moment i can place the widget onto my pages using a stripped template, so theres no visible trace at all visible on my pages, each time the widget loads on the page the file / rss file is updated thus i can now go here :
http://www.bidefordmarket.co.uk/bide...teventlist.rss
and see an rss feed just for the events.


Heres where i am completely at a loss, i dont know php, i copied and pasted bits and tried things until they worked.

I have a small concern regarding weird characters in the events posts, this seemed to break the rss page so it showed a "Page cannot be displayed" message, but on the whole seems to function ok..

Heres the thing i am laughing here i dont know php, not sure about hooks and things so you lost me

The code above is contained in a widget and seems a variation, the code inside some of the cron files looks like real php

if the code above works inside a widget, what do i need to do in order to create a new cron file say : events2rss.php , take the code above and place it in the new cron file and have it work?

if i for example use a copy of the sitemap.php cron file and call it rssevents.php, strip it and paste the code above into it i get an error of :

Fatal error: Call to a member function query_read() on a non-object in /home/b1d3f0rd/public_html/includes/cron/rssevents.php on line 36

the code i now have in my new cron/rssevents.php file are as follows:

any advice is great
Many thanks in advance..

Carl


PHP Code:
<?php
/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 4.2.0 Patch Level 3 - Licence Number L51851a8
|| # ---------------------------------------------------------------- # ||
|| # Copyright ?2000-2012 vBulletin Solutions Inc. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/

// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
if (!
is_object($vbulletin->db))
{
    exit;
}

// ########################################################################
// ######################### START MAIN SCRIPT ############################
// ########################################################################

ob_start(); 
global 
$db,$vbulletin
$calendarid="1"
$per_page "60"
//################################################ 
$d=date("d"); 
$m=date("m"); 
$y=date("y"); 
$sdate mktime(000date("$m"), date("$d"),  date("$y")); 
$edate mktime(000date("$m"), date("31"),  date("$y")); 
$and=" and dateline_from >= '".$sdate."'"

$getevents=$db->query_read("SELECT eventid, event, title, customfields, dateline_from from " TABLE_PREFIX "event WHERE calendarid='".$calendarid."' $and order by dateline_from ASC LIMIT $per_page"); 
$count=0
if(!
$db->num_rows($getevents)) 


else 

WHILE (
$events=$db->fetch_array($getevents)) 

$eventdetails=$events['event'];
$eventdetails=substr($eventdetails0300);
$eventdetails .= "......";
$customfield=$events['customfields'];
$customfield str_replace('a:0:{}'''$customfield );
$customfield =strstr ($customfield'"');
$customfield str_replace('"'''$customfield );
$customfield str_replace(';}'''$customfield );

$dtitle=$events['title']; 
$did=$events['eventid']; 
$date vbdate('d-m-y',$events['dateline_from'], false,true,false,true); 
$dateext vbdate('l jS F Y',$events['dateline_from'], false,true,false,true);
if (
$count 2){$class="alt2";}else {$class="alt1";} 
$year=date("Y"); 
$pagetitle $f
$pagetitle .= " "
$pagetitle.=$year
$eventbits .=""

$dateext htmlentities($dateext);
$eventdetails htmlentities($eventdetails);


$eventbitsExt .="
<item>
<title>
$dateext</title>
<description><![CDATA[
$eventdetails]]></description>
<link><![CDATA[http://www.bidefordmarket.co.uk/calendar.php?do=getinfo&e=
$did&c=$calendarid]]></link>
<guid><![CDATA[000000
$did]]></guid>
<pubDate><![CDATA[
$sdate]]></pubDate>
</item>
"

$count++; 




$bidefordmarketeventlist "bidefordmarketeventlist.rss";
$fh fopen($bidefordmarketeventlist'w') or die("can't open file");
fwrite($fh"<?xml version='1.0' encoding='UTF-8' ?>
<rss version='2.0'>
<channel>
<title>Bideford Market Events</title>
<description>This is the RSS feed for Bideford Markets Latest Events</description>
<link>http://www.bidefordmarket.co.uk</link>
<lastBuildDate>
$sdate</lastBuildDate>
<pubDate>
$sdate</pubDate>
<ttl>1800</ttl>
"
);

//$eventbitsExt = str_replace("£", "£", $eventbitsExt);
//$eventbitsExt = str_replace("&", "&", $eventbitsExt);

$strfinda .= chr(150);
$eventbitsExt str_replace($strfinda" "$eventbitsExt);


fwrite($fh$eventbitsExt);
fwrite($fh"</channel>
</rss>"
);
fclose($fh);


$db->free_result($getevents); 
unset(
$events); 
$output=ob_get_contents(); 
ob_end_clean();
Reply With Quote
  #4  
Old 01-22-2013, 03:05 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

When you say "cron" you're setting it up as a scheduled task using the php file you created, right? (Sometimes people get confused between that and the actual operating system cron). Assuming you are, I'm not sure why you're getting that error because I thought that $db was always a global with the database object, but that error looks like it's saying that it's not. So you could try changing your code to use $vbulletin->db in place of $db (I see 4 places where you'd have to change it).

If you wanted to try the plugin route instead you just have to go to Plugins & Products and choose "add new plugin", choose the hook location you want and paste your code into the text area. Make up a title and make sure you enable it by clicking 'Yes'. (I wanted to mention this just in case, but since you've already gone through the trouble of creating a file for this you might as well keep going with that method).
Reply With Quote
  #5  
Old 01-22-2013, 03:44 PM
4thstar 4thstar is offline
 
Join Date: Sep 2004
Posts: 10
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thank you for the help, with the information you have supplied things now seem to work , great job..

Yes you are correct, its the Sheduled tasks, not the cpanel cron i was thinking of using..

I have edited the code as below, its not 100% i need to look at how it creates the build and publish date, it now however creates the rss feed..

Thankyou.

PHP Code:
<?php
/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 4.2.0 Patch Level 3 - Licence Number L51851a8
|| # ---------------------------------------------------------------- # ||
|| # Copyright ?2000-2012 vBulletin Solutions Inc. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/

// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
if (!
is_object($vbulletin->db))
{
    exit;
}

// ########################################################################
// ######################### START MAIN SCRIPT ############################
// ########################################################################



ob_start(); 
 
$calendarid="1"
$per_page "60"
//################################################ 
$d=date("d"); 
$m=date("m"); 
$y=date("y"); 
$sdate mktime(000date("$m"), date("$d"),  date("$y")); 
$edate mktime(000date("$m"), date("31"),  date("$y")); 
$and=" and dateline_from >= '".$sdate."'"

$getevents=$vbulletin->db->query_read("SELECT eventid, event, title, customfields, dateline_from from " TABLE_PREFIX "event WHERE calendarid='".$calendarid."' $and order by dateline_from ASC LIMIT $per_page"); 
$count=0
if(!
$vbulletin->db->num_rows($getevents)) 


else 

WHILE (
$events=$vbulletin->db->fetch_array($getevents)) 

$eventdetails=$events['event'];
$eventdetails=substr($eventdetails0300);
$eventdetails .= "......";
$customfield=$events['customfields'];
$customfield str_replace('a:0:{}'''$customfield );
$customfield =strstr ($customfield'"');
$customfield str_replace('"'''$customfield );
$customfield str_replace(';}'''$customfield );

$dtitle=$events['title']; 
$did=$events['eventid']; 
$date vbdate('d-m-y',$events['dateline_from'], false,true,false,true); 
$dateext vbdate('l jS F Y',$events['dateline_from'], false,true,false,true);
if (
$count 2){$class="alt2";}else {$class="alt1";} 
$year=date("Y"); 
$pagetitle $f
$pagetitle .= " "
$pagetitle.=$year
$eventbits .=""

$dateext htmlentities($dateext);
$eventdetails htmlentities($eventdetails);


$eventbitsExt .="
<item>
<title>
$dateext</title>
<description><![CDATA[
$eventdetails]]></description>
<link><![CDATA[http://www.bidefordmarket.co.uk/calendar.php?do=getinfo&e=
$did&c=$calendarid]]></link>
<guid><![CDATA[000000
$did]]></guid>
<pubDate><![CDATA[
$sdate]]></pubDate>
</item>
"

$count++; 




$bidefordmarketeventlist "bidefordmarketeventlist.rss";
$fh fopen($bidefordmarketeventlist'w') or die("can't open file");
fwrite($fh"<?xml version='1.0' encoding='UTF-8' ?>
<rss version='2.0'>
<channel>
<title>Bideford Market Events</title>
<description>This is the RSS feed for Bideford Markets Latest Events</description>
<link>http://www.bidefordmarket.co.uk</link>
<lastBuildDate>
$sdate</lastBuildDate>
<pubDate>
$sdate</pubDate>
<ttl>1800</ttl>
"
);

//$eventbitsExt = str_replace("£", "£", $eventbitsExt);
//$eventbitsExt = str_replace("&", "&", $eventbitsExt);

$strfinda .= chr(150);
$eventbitsExt str_replace($strfinda" "$eventbitsExt);


fwrite($fh$eventbitsExt);
fwrite($fh"</channel>
</rss>"
);
fclose($fh);


$vbulletin->db->free_result($getevents); 
unset(
$events); 
$output=ob_get_contents(); 
ob_end_clean();
--------------- Added [DATE]1358881129[/DATE] at [TIME]1358881129[/TIME] ---------------

Hello all.

Thankyou again for the help....But i am now stuck again...help

ok in the code above i had to do some things as if there was a ? or " in my event details then the rss page failed to load in the browser..

I did some checking and ? gets converted to &pound; and " gets converted to &quot;

My new rss page then displays as it should.

If..

I use the rss widget code and enable the description to display the feed from inside the widget i get the symbols appear &pound; and &quot; not ? and "

I was going to add some php to the template to find and replace, looks like i cant do this?

then i was looking at vb:raw and other areas like this?

how can i add some code to a template take {vb:raw item.description} and find and replace characters before it displays on the browser?

Many thanks in advance, below i will attach my new template code.

my rss file shows ? : http://www.bidefordmarket.co.uk/bide...teventlist.rss

My rss display shows the characters : http://www.bidefordmarket.co.uk

vbcms_widget_rss_pageb

PHP Code:
<div class="cms_widget">
    <
div class="block">

    <!-- 
Rss Header -->
    <
div class="cms_widget_header">
        <
h3> <a href="{vb:raw rss_link}" target="_blank"> &nbsp;{vb:raw rss_title}</a></h3>
    </
div>

    <!--  
Rss Data  -->
    <
div class="cms_widget_content widget_content">
        <!-- {
vb:raw rss_description} -->

        <
vb:each from="rss_items" key="id" value="item">
            <
div class="cms_widget_post_bit widget_post_bit">
                <
h4 class="cms_widget_post_header widget_post_header"><a href="{vb:raw item.link}" target="_blank">{vb:raw item.title}</a></h4>
            

                  {
vb:raw item.description}
<
br />
                <!--{
vb:raw item.author} <br />
                -->
            </
div>
        </
vb:each>


    </
div>

<
vb:comment>
    <
vb:if condition="$rss_more">
        <
a href="{vb:raw rss_url}">{vb:rawphrase read_more}</a>
    </
vb:if>
</
vb:comment>

</
div>
</
div
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 08:05 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.05093 seconds
  • Memory Usage 2,310KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (4)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (5)post_thanks_box
  • (5)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (5)post_thanks_postbit_info
  • (5)postbit
  • (5)postbit_onlinestatus
  • (5)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete