Avatar billede fimp Nybegynder
26. september 2006 - 23:19 Der er 21 kommentarer og
1 løsning

Tage et tal fra et javascript output

På searchirc.com har de en funktion, der kan vise, hvor mange brugere en given kanal har. Scriptet outputter fx:

#eksperten has 7 users

Er det muligt at fiske tallet ud alene og putte det i en variabel, så outputtet i stedet blot bliver:

7

Må gerne være i PHP/ASP.
Avatar billede davidfossil Nybegynder
26. september 2006 - 23:39 #1
Her er et bud på noget der måske kan gøre tricket i din java script:

var retval = testFunction("#eksperten");
var test = /has (\d+) user/.exec(retval);
var num = test[1];
alert(num);

For at kunne arbejde videre med en af disse variable på serversiden (i fx PHP eller ASP), må du nødvendigvis foretage et kald til serveren og give variablen med som et GET eller POST parameter.
Avatar billede olebole Juniormester
27. september 2006 - 10:23 #2
<ole>

var myVar = "#eksperten has 7 users";
myVar = myVar.replace(/\D/gi, "");

alert(myVar)

/mvh
</bole>
Avatar billede roenving Novice
27. september 2006 - 12:33 #3
>>ole

-- men fun4you vil levere 47 ...

-- så måske vil det være bedre at gå den anden vej:

myVar = myVar.replace(/^.*?(\b\d+\b).*$/,"$1");
Avatar billede olebole Juniormester
27. september 2006 - 12:56 #4
roenving >> yups, det er det sædvanlige problem med 'fx' i vendinger à la: "Scriptet outputter fx:" ... der kan ligge mange muligheder (overaskelser) gemt i de to bogstaver  ;o)
Avatar billede fimp Nybegynder
27. september 2006 - 23:58 #5
Tak for hjælpen, men jeg har ingen forstand på javascript. Måske kan I hjælpe mig lidt mere?

For fx #uptime på QuakeNet ser scriptet sådan her ud:

<script language="JavaScript" src="http://searchirc.com/searchirc_chan_stats.php?n=44&c=I3VwdGltZQ^^&o=1"></script>

Det outputter: #uptime currently has 155 users
hvor 155 naturligvis ændrer sig efter antallet af brugere.

Hvad skal jeg mere præcist gøre med ovenstående script for at få den til kun at spytte nummeret ud?
Avatar billede roenving Novice
28. september 2006 - 10:56 #6
Den outptter en tekststreng (sikkert vha. document.write el. !-)

-- den skal du kunne få fat i, f.eks. ved at hente den som tekst-node i et element, så f.eks.

<div id="uptimeDiv" style="display:none;"><script language="JavaScript" src="http://searchirc.com/searchirc_chan_stats.php?n=44&c=I3VwdGltZQ^^&o=1"></script></div>

-- og så et script, der aflæser tekststrengen, når siden er færdigloadet:

<script type="text/javascript">
var usersDiv, numUsers;
window.onload = function(){
  readUsers("uptime");
}
function readUsers(site){
  if(!usersDiv)
    usersDiv = document.getElementById(site + "Div");
  if(usersDiv && usersDiv.firstChild && usersDiv.firstChild.nodeType == 3){
    numUsers = usersDiv.firstChild.nodeValue.replace(/^.*?(\b\d+\b).*$/,"$1");
    document.getElementById(site + "Td").firstChild.nodeValue = numUsers;
  }else{
    setTimeout("readUsers(" + site + ");", 500);
  }
}
</script>

-- og så skal du selvfølgelig have et element, hvor værdien står i, f.eks.

<table>
  <tr>
    <td>uptime</td>
    <td id="uptimeTd">&nbsp;</td>
  </tr>
</table>

-- men hvis scriptet bruger noget AJAX-noget og ændres dynamisk, skal der nok andre metoder til !-)
Avatar billede fimp Nybegynder
29. september 2006 - 10:12 #7
Endnu en gang tak for hjælpen, men skal jeg selv ændre/tilføje noget til dit script? Hvis jeg bare copy/paster det ind i et .html-dokument bliver det bare til "uptime" i browseren.
Avatar billede roenving Novice
05. oktober 2006 - 04:15 #8
Kan du linke til en prøve ?-)
Avatar billede fimp Nybegynder
05. oktober 2006 - 21:19 #9
Avatar billede roenving Novice
06. oktober 2006 - 16:06 #10
Argh, jeg havde li'e 'glemt' et par gnyffer:

  }else{
    setTimeout("readUsers('" + site + "');", 500);
  }
Avatar billede fimp Nybegynder
14. oktober 2006 - 13:42 #11
Avatar billede fimp Nybegynder
14. oktober 2006 - 13:42 #12
Og undskyld det sene svar, jeg har været på studietur...
Avatar billede roenving Novice
14. oktober 2006 - 14:18 #13
Argh ...

-- den lægger jo teksten i et link, så prøv:

<script type="text/javascript">
var usersDiv, numUsers;
window.onload = function(){
  readUsers("uptime");
}
function readUsers(site){
  if(!usersDiv)
    usersDiv = document.getElementById(site + "Div");
  try{
    var userText = usersDiv.getElementsByTagName("a")[0].firstChild;
    if(userText.nodeType == 3){
      numUsers = userText.nodeValue.replace(/^.*?(\b\d+\b).*$/,"$1");
      document.getElementById(site + "Td").firstChild.nodeValue = numUsers;
    }
  }catch(e){
    setTimeout("readUsers('" + site + "');", 500);
  }
}
</script>
Avatar billede fimp Nybegynder
14. oktober 2006 - 14:21 #14
Nu giver den "uptime    #uptime"

http://fimp.frac.dk/chanstats2.html
Avatar billede roenving Novice
14. oktober 2006 - 14:36 #15
Så prøv at ændre til:

...
    var userText = usersDiv.childNodes[1];
...
Avatar billede fimp Nybegynder
14. oktober 2006 - 14:42 #16
Altså "var usersDiv, numUsers;" til "var userText = usersDiv.childNodes[1];" ?

Giver følgende: http://fimp.frac.dk/chanstats2.html

Jeg er glad for, du tager dig tiden til at hjælpe mig, men ville det ikke være nemmere for os begge, hvis du selv testede dine ændringer? Eller er der en grund til, du ikke kan det?
Avatar billede roenving Novice
14. oktober 2006 - 14:50 #17
Nej, den linje, der starter med 'var userText' (lige efter try-linjen !-)
Avatar billede roenving Novice
14. oktober 2006 - 14:51 #18
Jeg har ikke overvejet det, da mange af disse tjenester er bundet til licenser !-)
Avatar billede roenving Novice
14. oktober 2006 - 14:56 #19
-- men den virker i hvert fald nu hos mig !-)

-- og jeg gik lige i gang med at sikre, at den kunne bruges til flere, kan du ikke angive script-kaldet til et andet site ?-)
Avatar billede fimp Nybegynder
14. oktober 2006 - 15:04 #20
Yes! Nu virker det. Lav et svar hvis du vil have point.

Man kan få scripts til alle IRC kanaler her: http://searchirc.com/request_channel_stats.php

Tusind tak for hjælpen.
Avatar billede roenving Novice
14. oktober 2006 - 15:12 #21
-- men jeg kender ikke nogle navne, så jeg kan ikke søge !-)

Velbekomme '-)
Avatar billede fimp Nybegynder
14. oktober 2006 - 15:28 #22
Her er top 100 channels: http://searchirc.com/top100.php
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester