What happened to the Messenger Plus! forums on msghelp.net?
Shoutbox » MsgHelp Archive » Messenger Plus! for Live Messenger » Scripting » Auto Refresh? twitter

Auto Refresh? twitter
Author: Message:
Lamonte
New Member
*


Posts: 4
Joined: Jun 2008
O.P. Auto Refresh? twitter
I'm trying to get my basic auto current twitter status in my personal message box automatically and refresh every 5 seconds, what am I doing wrong:

code:
var request = new ActiveXObject("Microsoft.XMLHTTP");
var serverResponse = "";
function getData()
{
   var TYPE = "GET"; //use GET to request information and POST to send information
   var URI = "http://twitter.com/statuses/user_timeline/__XD__.json";  //whatever server and or form you want to communicate with
   var ASYNC = true;  //if false script will pause until the request is complete
   request.open(TYPE, URI, ASYNC);
   request.send(null);
   request.onreadystatechange = processReadyStateChange();
}

function processReadyStateChange()
{
   Messenger.MyPersonalMessage = "Twitter: Loading...";
   if(request.readyState == 4 && request.status == 200)
   {
       json = eval( request.responseText )
       Messenger.MyPersonalMessage = "Twitter: " + json[0].text
   }
}
function OnEvent_Initialize(MessengerStart)
{
    MsgPlus.AddTimer("Timer",5000); //called every 5 second
    getData()
}
function OnEvent_Timer(TimerId) {
    if(TimerId == 'Timer') {
        getData();
        MsgPlus.AddTimer("Timer",5000); //called every 5 second
    }
}
function OnEvent_Uninitialize(MessengerExit)
{
}


I couldn't find answer after searching, so I just joined :) hey everyone!
06-20-2008 12:25 AM
Profile E-Mail PM Find Quote Report
Eljay
Elite Member
*****

Avatar
:O

Posts: 2949
Reputation: 77
– / Male / –
Joined: May 2004
RE: Auto Refresh? twitter
Welcome to the forum :wave:

At a quick glance, the only obvious problem I can see is with the way you assign "onreadystatechange".
code:
request.onreadystatechange = processReadyStateChange();

There is a difference between "processReadyStateChange", which is a pointer to the function so it can be used for callbacks etc, and "processReadyStateChange()" (note the parentheses) which actually calls the function and grabs whatever value it returns.

So simply change it to:
code:
request.onreadystatechange = processReadyStateChange;

and all should be well :)


Edit: additional note, updating every 5 seconds won't always work as the Messenger protocol has limits on how many times you can update your personal message/name. I think it is set at 6 times per minute, somebody correct me if I'm wrong :P

This post was edited on 06-20-2008 at 12:40 AM by Eljay.
06-20-2008 12:37 AM
Profile PM Find Quote Report
Lamonte
New Member
*


Posts: 4
Joined: Jun 2008
O.P. RE: Auto Refresh? twitter
I changed, that but I can't see it refreshing at all.

Now I changed it back and it loads ONCE but it doesn't update.

This post was edited on 06-20-2008 at 12:44 AM by Lamonte.
06-20-2008 12:41 AM
Profile E-Mail PM Find Quote Report
Eljay
Elite Member
*****

Avatar
:O

Posts: 2949
Reputation: 77
– / Male / –
Joined: May 2004
RE: Auto Refresh? twitter
Ok, silly me for not noticing this the first time 8-) :P

code:
   request.send(null);
   request.onreadystatechange = processReadyStateChange(); // this still needs to be removed


The callback is being assigned after the request is sent meaning that it doesn't exist to be called (at least not the first time, subsequent requests would work because you are using the same xmlhttp object). Those two lines should be the other way around.

This post was edited on 06-20-2008 at 01:08 AM by Eljay.
06-20-2008 01:06 AM
Profile PM Find Quote Report
Lamonte
New Member
*


Posts: 4
Joined: Jun 2008
O.P. RE: Auto Refresh? twitter
Actually no, it doesn't work without the parenthesis..

code:
var request = new ActiveXObject("Microsoft.XMLHTTP");
var serverResponse = "";
function getData()
{
   var TYPE = "GET"; //use GET to request information and POST to send information
   var URI = "http://twitter.com/statuses/user_timeline/__XD__.json";  //whatever server and or form you want to communicate with
   var ASYNC = true;  //if false script will pause until the request is complete
   request.open(TYPE, URI, ASYNC);
   request.onreadystatechange = processReadyStateChange();//
   request.send(null);
}

function processReadyStateChange()
{
   Messenger.MyPersonalMessage = "Twitter: Loading...";
   if(request.readyState == 4 && request.status == 200)
   {
   
       json = eval( request.responseText )
       Messenger.MyPersonalMessage = "Twitter: " + json[0].text
   }
}
function OnEvent_Initialize(MessengerStart)
{
    MsgPlus.AddTimer("Timer",25000); //called every 5 second
    getData()
}
function OnEvent_Timer(TimerId) {
    if(TimerId == 'Timer') {
        getData();
        MsgPlus.AddTimer("Timer",25000); //called every 5 second
    }
}
function OnEvent_Uninitialize(MessengerExit)
{
}

06-20-2008 01:11 AM
Profile E-Mail PM Find Quote Report
Lamonte
New Member
*


Posts: 4
Joined: Jun 2008
O.P. RE: Auto Refresh? twitter
Blah I fixed it my self:

code:
//cleanscript.com
function OnEvent_Initialize(MessengerStart)
{
    MsgPlus.AddTimer("Timer",60000); //called every 5 second
    getData()
}
function OnEvent_Timer(TimerId) {
    if(TimerId == 'Timer') {
        getData();
        MsgPlus.AddTimer("Timer",60000); //called every 5 second
    }
}
function OnEvent_Uninitialize(MessengerExit)
{
}

function getData()
{
   var request = new ActiveXObject("Microsoft.XMLHTTP");
   var serverResponse = "";
   var TYPE = "GET"; //use GET to request information and POST to send information
   var URI = "http://twitter.com/statuses/user_timeline/__XD__.json";  //whatever server and or form you want to communicate with
   var ASYNC = true;  //if false script will pause until the request is complete
   request.open(TYPE, URI, ASYNC);
   request.onreadystatechange = function (){
       Messenger.MyPersonalMessage = "Twitter: Loading...";
       if(request.readyState == 4 && request.status == 200)
       {
           json = eval( request.responseText )
           Messenger.MyPersonalMessage = "Twitter: " + json[0].text
       }
   }
   request.send();
}


Thanks me :)

This post was edited on 06-20-2008 at 11:19 PM by Lamonte.
06-20-2008 11:18 PM
Profile E-Mail PM Find Quote Report
Matti
Elite Member
*****

Avatar
Script Developer and Helper

Posts: 1646
Reputation: 39
31 / Male / Flag
Joined: Apr 2004
RE: Auto Refresh? twitter
The reason why it didn't work is quite simple in fact: the request object isn't defined in the context of processReadyStateChange.
You could've fixed this by defining the processReadyStateChange function inside your getData function, like this:
code:
function getData()
{
   var TYPE = "GET"; //use GET to request information and POST to send information
   var URI = "http://twitter.com/statuses/user_timeline/__XD__.json";  //whatever server and or form you want to communicate with
   var ASYNC = true;  //if false script will pause until the request is complete
   request.open(TYPE, URI, ASYNC);
   request.onreadystatechange = processReadyStateChange;
   request.send(null);

   function processReadyStateChange()
   {
      Messenger.MyPersonalMessage = "Twitter: Loading...";
      if(request.readyState == 4 && request.status == 200)
      {
       json = eval( request.responseText )
       Messenger.MyPersonalMessage = "Twitter: " + json[0].text
      }
   }
}
When you do this, the request variable will still be defined in the scope of processReadyStateChange when it's been called by the XMLHTTP request (which is also the case in your method). You can choose which method you want to use, the method above may be a bit nicer to read but there's nothing wrong with the way you did it. :)
Plus! Script Developer | Plus! Beta Tester | Creator of Countdown Live | Co-developer of Screenshot Sender 5

Found my post useful? Rate me!
06-21-2008 06:55 AM
Profile E-Mail PM Web Find Quote Report
« Next Oldest Return to Top Next Newest »


Threaded Mode | Linear Mode
View a Printable Version
Send this Thread to a Friend
Subscribe | Add to Favorites
Rate This Thread:

Forum Jump:

Forum Rules:
You cannot post new threads
You cannot post replies
You cannot post attachments
You can edit your posts
HTML is Off
myCode is On
Smilies are On
[img] Code is On