Go Back   vb.org Archive > vBulletin Modifications > Archive > Modification Graveyard

Reply
 
Thread Tools
vBulletin to Twitter, live tweets of new threads Details »»
vBulletin to Twitter, live tweets of new threads
Version: 1.00, by buro9 buro9 is offline
Developer Last Online: Jul 2012 Show Printable Version Email this Page

Category: Miscellaneous Hacks - Version: 4.0.x Rating:
Released: 01-26-2010 Last Update: Never Installs: 272
Uses Plugins
Re-useable Code Additional Files Translations  
No support by the author.

This should work on all 4 and 3 versions of vBulletin as it's trivial.

Description:

You start a new thread, this hack makes a tweet about it on your twitter account.

This are live updates... not delayed, not based on RSS... the instant the thread is started, a tweet is made. This is how this hack differs from other hacks.

Why:

Mostly for SEO, but also as an alert system.

For SEO the idea is simply that search engines are drinking from the Twitter firehose and are indexing the links that are tweeted. Faster and increased indexing of your site benefits you by helping it be found.

For alerts it means that users are able to use whatever twitter client they wish to obtain updates. A lot of these provide filtering capabilities, so they're able to get a live filtered stream of updates that interest them. This works very well when you also use thread prefixes.

Pre-requisites:

You should have an account on bit.ly for URL shortening, and you should have an account on Twitter.

Go and register if you haven't yet:
http://bit.ly/
http://twitter.com/

Installation:

NOTE: Most problems are related to not putting your bit.ly or twitter user details in the plugin. Follow the instructions carefully!

Upload the two attached files to your forum root. These are twitter and bitly classes that enable the hack to work, you can also download these from the author:
http://classes.verkoyen.eu/bitly
http://classes.verkoyen.eu/twitter/

Go to the plugin manager and create a new plugin with the following details:
Product: vBulletin
Hook: newthread_post_complete
Title: Tweet to Twitter

PHP Code: [See below]

To configure the PHP code you need to know your bit.ly API key (go get it from bit.ly/account) and your username and password for twitter.

You also should make a list of the forumIds that are non-public as you will want to put these in the array provided.

i.e. if your admin forum is forumId = 7 and you also have a private forum for regular members which is forumid = 12, then you will want this:
$excludedForums = array(7, 12);

The PHP code should be this, with all of the relevant values for your forum inserted (replace everything bolded, including the < and > bits):
PHP Code:
// The array below are the ids of non-public forums, update these to be your admin forum ids or anything non-public by default
$excludedForums = array(0);

// If you are having trouble getting bitly URL shortening to work... disable it!
$useBitly true;

if (!
in_array($foruminfo[forumid], $excludedForums)) {
    
$shortUrl 'http://www.yourforumsdomain.com/showthread.php?t='.$newpost[threadid];

    if (
$useBitly) {
      
// http://classes.verkoyen.eu/bitly
      
require_once 'bitly.php';
      
$bitly = new Bitly('<bit.ly username>''<bit.ly API key>');
      
$shortUrl $bitly->shorten($shortUrl);
    }

    
$tweet '';
    if (isset(
$newpost['prefixid']) && $newpost['prefixid'] != '') {
        
$tweet $vbphrase['prefix_'.$newpost['prefixid'].'_title_plain'].' ';
    }
    
$tweet .= $newpost['title'].' '.$shortUrl;

    
// http://classes.verkoyen.eu/twitter/
    
require_once 'twitter.php';
    
$twitter = new Twitter('<twitter username>','<twitter password>');
    
$twitter->updateStatus($tweet);

So the bit.ly line might look like this after you've put your values in:
$bitly = new Bitly('testUser', 'R_hj3456hgf3hig56hi2gf6');
NOT
$bitly = new Bitly('<testUser>', '<R_hj3456hgf3hig56hi2gf6>');
See? Remove those <> bits, they just show what to replace.

The shortUrl line might look like this:
$shortUrl = 'http://www.vbulletin.com/forum/showthread.php?t='.$newpost[threadid];

The Twitter line might look like this:
$twitter = new Twitter('stephenfry','op1umisn1ce');

All make sense?

And that's it. Save and activate the plugin and create a test thread.

Now whenever a new thread is started, a tweet will be made to twitter instantly.

You can see this in effect here:
http://twitter.com/lfgss

That is being pushed new threads for http://www.lfgss.com/ and it's working perfectly.

Any questions?

FAQ (Frequently Asked Questions)

Q: It doesn't work!

A: That's not a question, however if it doesn't work then it's extremely likely you got your username and passwords wrong or left the < > signs in there. Double-check and do it again.

Q: I see an "INVALID_JSON" error

A: Disable bitly by setting $useBitly to false.
Q: I see an "You must be authenticated to access shorten" error

A: The credentials that you entered are either wrong, or you made a mess of the syntax. You did remove the < > when you put your values in right? Did you check the example given above?

Q: I see an error that says "Warning: curl_setopt_array() [function.curl-setopt-array]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in [path]/bitly.php"

A: Wow, that's a good one... but easily fixable. Insert this at line 136 (just after the CURL options) in bitly.php:
PHP Code:
$no_hack_needed = (ini_get('safe_mode') !== '1' && ini_get('open_basedir') === false);
if (
$no_hack_needed) {
  
$options[CURLOPT_FOLLOWLOCATION] = true;
} else {
  
$options[CURLOPT_FOLLOWLOCATION] = false;
  
$options[CURLOPT_HEADER] = true;

Show Your Support

  • This modification may not be copied, reproduced or published elsewhere without author's permission.

Comments
  #52  
Old 01-28-2010, 01:43 PM
Flep Flep is offline
 
Join Date: Jul 2007
Location: Cesenatico
Posts: 61
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

When I post a new thread I get the following error:
Quote:
{ "errorCode": 0, "errorMessage": "", "results": { "http://www..../forum/showthread.php?t=5559": { "hash": "aQBF2F", "shortCNAMEUrl": "http://bit.ly/bsN5LF", "shortKeywordUrl": "", "shortUrl": "http://bit.ly/bsN5LF", "userHash": "bsN5LF" } }, "statusCode": "OK" }Invalid JSON-response on line 196 in /var/www/vhosts/.../httpdocs/forum/bitly.php
#0 /var/www/vhosts/.../httpdocs/forum/bitly.php(382): Bitly->doCall('shorten', Array)
#1 /var/www/vhosts/.../httpdocs/forum/newthread.php(262) : eval()'d code(12): Bitly->shorten('http://www....')
#2 /var/www/vhosts/.../httpdocs/forum/newthread.php(262): eval()
#3 /var/www/vhosts/.../httpdocs/forum/vbseo.php(1621): require('/var/www/vhosts...')
#4 {main}


Fatal error: Invalid JSON-response on line 196 in [path]/bitly.php in [path]/vb/vb.php on line 284
#0 vb_error_handler(256, Invalid JSON-response on line 196 in /var/www/vhosts/.../httpdocs/forum/bitly.php , /var/www/vhosts/.../httpdocs/forum/vb/vb.php, 284, Array ([exception] => BitlyException Object ([] => Invalid JSON-response,[] => ,[] => 0,[] => /var/www/vhosts/.../httpdocs/forum/bitly.php,[] => 196,[] => Array ([0] => Array ([file] => /var/www/vhosts/.../httpdocs/forum/bitly.php,[line] => 382,[function] => doCall,[class] => Bitly,[type] => ->,[args] => Array ([0] => shorten,[1] => Array ([longUrl] => http://www..../forum/showthread.php?t=5559,[history] => 1))),[1] => Array ([file] => /var/www/vhosts/.../httpdocs/forum/newthread.php(262) : eval()'d code,[line] => 12,[function] => shorten,[class] => Bitly,[type] => ->,[args] => Array ([0] => http://www..../forum/showthread.php?t=5559)),[2] => Array ([file] => /var/www/vhosts/.../httpdocs/forum/newthread.php,[line] => 262,[function] => eval),[3] => Array ([file] => /var/www/vhosts/.../httpdocs/forum/vbseo.php,[line] => 1621,[args] => Array ([0] => /var/www/vhosts/.../httpdocs/forum/newthread.php),[function] => require))),[code] => 256)) #1 trigger_error(Invalid JSON-response on line 196 in /var/www/vhosts/.../httpdocs/forum/bitly.php , 256) called at [/var/www/vhosts/.../httpdocs/forum/vb/vb.php:284] #2 vB::handleException(BitlyException Object ([] => Invalid JSON-response,[] => ,[] => 0,[] => /var/www/vhosts/.../httpdocs/forum/bitly.php,[] => 196,[] => Array ([0] => Array ([file] => /var/www/vhosts/.../httpdocs/forum/bitly.php,[line] => 382,[function] => doCall,[class] => Bitly,[type] => ->,[args] => Array ([0] => shorten,[1] => Array ([longUrl] => http://www..../forum/showthread.php?t=5559,[history] => 1))),[1] => Array ([file] => /var/www/vhosts/.../httpdocs/forum/newthread.php(262) : eval()'d code,[line] => 12,[function] => shorten,[class] => Bitly,[type] => ->,[args] => Array ([0] => http://www..../forum/showthread.php?t=5559)),[2] => Array ([file] => /var/www/vhosts/.../httpdocs/forum/newthread.php,[line] => 262,[function] => eval),[3] => Array ([file] => /var/www/vhosts/.../httpdocs/forum/vbseo.php,[line] => 1621,[args] => Array ([0] => /var/www/vhosts/.../httpdocs/forum/newthread.php),[function] => require))))
Reply With Quote
  #53  
Old 01-28-2010, 02:04 PM
buro9 buro9 is offline
 
Join Date: Feb 2002
Location: London, UK
Posts: 585
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Jesh View Post
Getting 500 internal server error, any ideas?
Nope... you must have made a syntax error.
Quote:
Originally Posted by Bouncer222 View Post
This mod is all great and I love the idea, never thought of it... but..

How exactly is it helping you get visitors to your site from those viewing your twitter page? I mean...all those threads that are relayed to twitter to be posted have no link backs to your actual vbulletin site, do they? Correct me if I'm wrong.

But if it just copies threads/posts and posts it on tweeter without some sort of link back to original thread... then what's the use?

Again, correct me if I'm wrong.
And thanks for the mod!
Bit.ly is being used to make sure your URLs don't break the 140 chars limit for the whole message. A prefix could take 10 chars, a thread title up to 85, leaving you with 45 chars for the URL, 43 if you substract 2 spaces... so to ensure that the URL fits I shorten it.

Bit.ly redirects traffic to the shortened URL to your site. And bit.ly keeps stats of this, so you get stats on who is clicking through as a result of twitter.

Quote:
Originally Posted by blake247 View Post
I have the same error
The authentication error is a result of not following the instructions.

Note tazattitude's post:
Quote:
the bitly should look like this (example)
$bitly = new Bitly('testUser', 'R_hj3456hgf3hig56hi2gf6');
not $bitly = new Bitly('<testUser>', '<R_hj3456hgf3hig56hi2gf6>');
Reply With Quote
  #54  
Old 01-28-2010, 02:08 PM
buro9 buro9 is offline
 
Join Date: Feb 2002
Location: London, UK
Posts: 585
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Flep View Post
When I post a new thread I get the following error:
Flep, you're seeing the same issue as Nordinho, though I have no idea why it happens.

It's basically that PHP provides a built-in function called json_decode. That is failing even though the JSON from bit.ly is valid. I don't know why it's failing for you guys and not anyone else.

Feel free to comment out the bit.ly part of the plugin if the length of your thread URL's is below 43 chars (which is likely). The only part you'd lose as a result is stats from bit.ly about how many people clicked each link.

Quote:
Originally Posted by Nordinho View Post
It seems so indeed, commented out the json errors and it posts to twitter (obviously not the shortened url though)
Nordinho... still can't help except to advise that you skip the URL shortening if your URLs are always going to be below 43 chars in length.

Can't for the life of me see why json_decode is failing as it's a built-in function. I'm on PHP 5.10 but it's not like I believe that json_decode wasn't working properly in any of the v5 branch.
Reply With Quote
  #55  
Old 01-28-2010, 02:11 PM
cagbaazee cagbaazee is offline
 
Join Date: Jul 2007
Posts: 179
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

i I hv make change again but nothing is working..

here is my code please check whether it is working or not.

// The array below are the ids of non-public forums, update these to be your admin forum ids or anything non-public by default
$excludedForums = array(0);

if (!in_array($foruminfo[forumid], $excludedForums)) {
// http://classes.verkoyen.eu/bitly
require_once 'bitly.php';

// http://classes.verkoyen.eu/twitter/
require_once 'twitter.php';

$bitly = new Bitly('guru', 'R_5e3b37532588ecb8603c0f14b5b75cbz');
$shortUrl = $bitly->shorten('http://www.guru.info/forum/showthread.php?t='.$newpost[threadid]);

$tweet = '';
if (isset($newpost['prefixid']) && $newpost['prefixid'] != '') {
$tweet = $vbphrase['prefix_'.$newpost['prefixid'].'_title_plain'].' ';
}
$tweet .= $newpost['title'].' '.$shortUrl;

$twitter = new Twitter('guru','jimmy');
$twitter->updateStatus($tweet);
}


=================================================

// The array below are the ids of non-public forums, update these to be your admin forum ids or anything non-public by default
$excludedForums = array(0);

if (!in_array($foruminfo[forumid], $excludedForums)) {
// http://classes.verkoyen.eu/bitly
require_once 'bitly.php';

// http://classes.verkoyen.eu/twitter/
require_once 'twitter.php';

$bitly = new Bitly('wadhera69@hotmail.com', 'R_5e3b37532588ecb8603c0f14b5b75cbz');
$shortUrl = $bitly->shorten('http://www.guru.info/forum/showthread.php?t='.$newpost[threadid]);

$tweet = '';
if (isset($newpost['prefixid']) && $newpost['prefixid'] != '') {
$tweet = $vbphrase['prefix_'.$newpost['prefixid'].'_title_plain'].' ';
}
$tweet .= $newpost['title'].' '.$shortUrl;

$twitter = new Twitter('guru','jimmy');
$twitter->updateStatus($tweet);
}


==================

please confirm what is correct code for that. what is array stand for .. it mean that i donot hv to show my forum id or thread to public.. Right

Do reply
Reply With Quote
  #56  
Old 01-28-2010, 02:13 PM
buro9 buro9 is offline
 
Join Date: Feb 2002
Location: London, UK
Posts: 585
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

The first one looks correct, the second on is wrong.

bit.ly expects your username (not email) and your api key.

I wouldn't be posting either your API key or passwords on here btw... that's kinda silly.
Reply With Quote
  #57  
Old 01-28-2010, 02:14 PM
buro9 buro9 is offline
 
Join Date: Feb 2002
Location: London, UK
Posts: 585
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by cagbaazee View Post
what is array stand for .. it mean that i donot hv to show my forum id or thread to public.. Right
The array EXCLUDES forums.

Hence it being called $excludedForums.

So if you have admin forums, or other non-public forums, you can prevent these from being tweeted.

Simples.

Explanation is in the instructions.
Reply With Quote
  #58  
Old 01-28-2010, 02:16 PM
cagbaazee cagbaazee is offline
 
Join Date: Jul 2007
Posts: 179
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by buro9 View Post
The first one looks correct, the second on is wrong.

bit.ly expects your username (not email) and your api key.

I wouldn't be posting either your API key or passwords on here btw... that's kinda silly.

i know that it is fake api and fake username / password.



But u didnot answer my question -

"please confirm what is correct code for that. what is array stand for .. it mean that i donot hv to show my forum id or thread to public.. Right

Do reply"
Reply With Quote
  #59  
Old 01-28-2010, 02:24 PM
buro9 buro9 is offline
 
Join Date: Feb 2002
Location: London, UK
Posts: 585
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by cagbaazee View Post
But u didnot answer my question -

"please confirm what is correct code for that. what is array stand for .. it mean that i donot hv to show my forum id or thread to public.. Right

Do reply"
Post #56 answers it, and an example is in the instructions:
Quote:
You also should make a list of the forumIds that are non-public as you will want to put these in the array provided.

i.e. if your admin forum is forumId = 7 and you also have a private forum for regular members which is forumid = 12, then you will want this:
$excludedForums = array(7, 12);
So in that example any new threads that are started within forum 7 or forum 12 won't be tweeted.

Does this not make sense?
Reply With Quote
  #60  
Old 01-28-2010, 02:26 PM
buro9 buro9 is offline
 
Join Date: Feb 2002
Location: London, UK
Posts: 585
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

@Nordinho and @Flep

I've updated the instructions so that disabling bitly and using the long version of the URL is trivial.

Just set $useBitly = false; where it is currently true.
Reply With Quote
  #61  
Old 01-28-2010, 02:43 PM
cagbaazee cagbaazee is offline
 
Join Date: Jul 2007
Posts: 179
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by buro9 View Post
Post #56 answers it, and an example is in the instructions:

So in that example any new threads that are started within forum 7 or forum 12 won't be tweeted.

Does this not make sense?
Thanks.. if what i donot make wanna to make array.. so deafult (0) so all forumid will display. Right. Do reply
Reply With Quote
Reply

Thread Tools

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 10:57 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.06507 seconds
  • Memory Usage 2,353KB
  • Queries Executed 25 (?)
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
  • (2)bbcode_php
  • (12)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)modsystem_post
  • (1)navbar
  • (4)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (4)pagenav_pagelink
  • (2)pagenav_pagelinkrel
  • (11)post_thanks_box
  • (11)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (11)post_thanks_postbit_info
  • (10)postbit
  • (11)postbit_onlinestatus
  • (11)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_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
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete