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
  #282  
Old 03-09-2010, 05:09 AM
zeroality zeroality is offline
 
Join Date: Jul 2006
Posts: 187
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

This one is better, simple product import.
Reply With Quote
  #283  
Old 03-10-2010, 03:31 PM
LbR LbR is offline
 
Join Date: Nov 2009
Posts: 145
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

how to fix this

{ "errorCode": 0, "errorMessage": "", "results": { "http://www.forums.emonx.com/showthread.php?t=16449": { "hash": "bHseVJ", "shortCNAMEUrl": "http://bit.ly/cN24Pk", "shortKeywordUrl": "", "shortUrl": "http://bit.ly/cN24Pk", "userHash": "cN24Pk" } }, "statusCode": "OK" }Invalid JSON-response on line 196 in /home/admin/emonx.com/forum/bitly.php
#0 /home/admin/emonx.com/forum/bitly.php(382): Bitly->doCall('shorten', Array)
#1 /home/admin/emonx.com/forum/newthread.php(262) : eval()'d code(14): Bitly->shorten('http://www.foru...')
#2 /home/admin/emonx.com/forum/newthread.php(262): eval()
#3 {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 /home/admin/emonx.com/forum/bitly.php , /home/admin/emonx.com/forum/vb/vb.php, 284, Array ([exception] => BitlyException Object ([] => Invalid JSON-response,[] => ,[] => 0,[] => /home/admin/emonx.com/forum/bitly.php,[] => 196,[] => Array ([0] => Array ([file] => /home/admin/emonx.com/forum/bitly.php,[line] => 382,[function] => doCall,[class] => Bitly,[type] => ->,[args] => Array ([0] => shorten,[1] => Array ([longUrl] => http://www.forums.emonx.com/showthread.php?t=16449,[history] => 1))),[1] => Array ([file] => /home/admin/emonx.com/forum/newthread.php(262) : eval()'d code,[line] => 14,[function] => shorten,[class] => Bitly,[type] => ->,[args] => Array ([0] => http://www.forums.emonx.com/showthread.php?t=16449)),[2] => Array ([file] => /home/admin/emonx.com/forum/newthread.php,[line] => 262,[function] => eval))),[code] => 256)) called at [(null):0] #1 trigger_error(Invalid JSON-response on line 196 in /home/admin/emonx.com/forum/bitly.php , 256) called at [/home/admin/emonx.com/forum/vb/vb.php:284] #2 vB::handleException(BitlyException Object ([] => Invalid JSON-response,[] => ,[] => 0,[] => /home/admin/emonx.com/forum/bitly.php,[] => 196,[] => Array ([0] => Array ([file] => /home/admin/emonx.com/forum/bitly.php,[line] => 382,[function] => doCall,[class] => Bitly,[type] => ->,[args] => Array ([0] => shorten,[1] => Array ([longUrl] => http://www.forums.emonx.com/showthread.php?t=16449,[history] => 1))),[1] => Array ([file] => /home/admin/emonx.com/forum/newthread.php(262) : eval()'d code,[line] => 14,[function] => shorten,[class] => Bitly,[type] => ->,[args] => Array ([0] => http://www.forums.emonx.com/showthread.php?t=16449)),[2] => Array ([file] => /home/admin/emonx.com/forum/newthread.php,[line] => 262,[function] => eval)))) called at [(null):0]
Reply With Quote
  #284  
Old 03-10-2010, 05:06 PM
Videx's Avatar
Videx Videx is offline
 
Join Date: Feb 2007
Posts: 3,085
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by LbR View Post
how to fix this
Invalid JSON-response on line
Please refer to post #1 in this thread.
Quote:

Q: I see an "INVALID_JSON" error

A: Disable bitly by setting $useBitly to false.
Reply With Quote
  #285  
Old 03-10-2010, 05:41 PM
LbR LbR is offline
 
Join Date: Nov 2009
Posts: 145
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

@ Videx

now this comes

/statuses/update.xml Could not authenticate you. Unauthorized on line 229 in /home/admin/emonx.com/forum/twitter.php
#0 /home/admin/emonx.com/forum/twitter.php(648): Twitter->doCall('statuses/update...', Array, true)
#1 /home/admin/emonx.com/forum/newthread.php(262) : eval()'d code(26): Twitter->updateStatus('tgerrrrrrrrrree...')
#2 /home/admin/emonx.com/forum/newthread.php(262): eval()
#3 {main}
Reply With Quote
  #286  
Old 03-10-2010, 05:43 PM
LbR LbR is offline
 
Join Date: Nov 2009
Posts: 145
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

It was working fine when i was on Shared hosting now on VPS it doesnt works
Reply With Quote
  #287  
Old 03-10-2010, 10:36 PM
Videx's Avatar
Videx Videx is offline
 
Join Date: Feb 2007
Posts: 3,085
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

"Could not authenticate you" (with Twitter) is going to be more difficult. Look back through the thread and you'll see others with the problem, and they don't seem to have had a lot of luck solving it.
Reply With Quote
  #288  
Old 03-11-2010, 05:47 AM
Globus Globus is offline
 
Join Date: Feb 2009
Posts: 10
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Hello everyone!

First, buro9 Thank You for the great plugin you have done for the public and been so good in replying to our not so smart questions!

However, i was not able to get it going from the first kick! After reading about 12 pages of this thread and trying everything possible I Got IT going.

The working conditions(in my case) are:
vB 4.0.2
vBSEO 3.5: Custom URLs
Charset: UTF-8 ( Russian)
User details: correct
CURL: installed.
JSON: enabled.
Safe_Mode: off

bitly.php CURL options:
PHP Code:
// set options
        
$options[CURLOPT_URL] = $url;
        
$options[CURLOPT_PORT] = self::API_PORT;
        
$options[CURLOPT_USERAGENT] = $this->getUserAgent();
        
$options[CURLOPT_FOLLOWLOCATION] = false;
        
$options[CURLOPT_HEADER] = false;
        
$options[CURLOPT_RETURNTRANSFER] = true;
        
$options[CURLOPT_TIMEOUT] = (int) $this->getTimeOut(); 

tweeter.php CURL options:

PHP Code:
// set options
        
$options[CURLOPT_URL] = $url;
        
$options[CURLOPT_PORT] = self::TWITTER_API_PORT;
        
$options[CURLOPT_USERAGENT] = $this->getUserAgent();
        
$options[CURLOPT_FOLLOWLOCATION] = false;
        
$options[CURLOPT_RETURNTRANSFER] = true;
        
$options[CURLOPT_TIMEOUT] = (int) $this->getTimeOut(); 
Hope it helps somebody.
All the best!
Reply With Quote
  #289  
Old 03-11-2010, 04:47 PM
Budget101 Budget101 is offline
 
Join Date: Jul 2008
Posts: 331
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Videx View Post
I'm not a coder, but after hacking away with these two mods I finally got one that works for me. I made no claim to credit for anything, nor am I suggesting anyone should use mine.
Well, First KUDOS to you Videx, If you were close buy I'd buy you a CASE of Beer. I tried the original code here and no matter WHAT I did bit.ly would NOT work. Then I went over and downloaded vBulletin2Twitter and that didn't work either. 6 1/2 hours of tweaking, reading tons of posts and signing up to a "support" forum only to find out that you have to Pay for help on the "hacks", I finally discovered your post and gave it a go. It's working wonderfully.

Thank you - Thank You - Thank you.
Reply With Quote
  #290  
Old 03-11-2010, 05:08 PM
Videx's Avatar
Videx Videx is offline
 
Join Date: Feb 2007
Posts: 3,085
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
only to find out that you have to Pay for help on the "hacks"
Actually, let's wish the guy the best of luck. Every day I see people post "I'll pay to get this or that". Well, Mosh seems to know his way around this code (unlike myself), so now is the time to support his endeavors. I'm sure he will only make this mod better, and god knows I couldn't have gotten mine working at all if not for him.
Reply With Quote
  #291  
Old 03-11-2010, 06:18 PM
123LearnToTrade 123LearnToTrade is offline
 
Join Date: Feb 2010
Posts: 26
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

If I have an RSS feed I am importing and it is posting a new thread with the RSS feed info in it, for some reason this does not post that thread to twitter. Is there a way to modify this?
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 03:16 PM.


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.16420 seconds
  • Memory Usage 2,334KB
  • 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
  • (4)bbcode_php
  • (4)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