webForumDet fria alternativet

XMLHTTP

20 svar · 466 visningar · startad av Asa

AsaMedlem sedan dec. 20011 860 inlägg
#1

Håller på å försöker få till med denna kod att visa tid och nyhetsrubriker från Expressen.
http://www.expressen.se/expressen/jsp/polopoly.jsp?d=10&a=633

Men koden skriver bara ut första nyheten. Varför? Nån som vet?

<%Function getNews(n)
  sFind = "<span class=""Verdana10"">"
  eFind = "<br>"

  Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
  objHTTP.Open "GET", "http://www.expressen.se/expressen/jsp/polopoly.jsp?d=10&a=633", False
  objHTTP.Send
      str = objHTTP.responseText
  Set objHTTP = Nothing

  str = Right(str,Len(str)-InStr(str,sFind)+1)
  str = Left(str,InStr(str,"</span>")-1)

  i=0
  Do Until i = n OR InStr(str,sFind) < 1
    spos = InStr(str,sFind)
    rstr = Right(str,Len(str)-spos+1)
    epos = InStr(rstr,eFind)-1

    substr = Mid(str,spos,epos)
    substr = Replace(substr,"<a href="""," | <a class=""vit"" target=""_blank"" href=""http://www.expressen.se")
    If i = 0 Then
      myStr  = myStr & substr
    Else
      myStr  = myStr & "<br>" & substr
    End If

    str = Right(str,Len(str)-spos-Len(substr)+1)
  i=i+1
  Loop
  getNews = myStr
End Function%>

<%=getNews(5)%>
tydalMedlem sedan juni 20034 013 inlägg
#2

När programmet inte gör som man tycker det borde är det bara att sätta sig ner och börja debugga...

Du säger att du bara får ut första nyheten. Kan det vara loopen som strular? Skriv ut variabeln i efter att loopen har kört klart så ser du hur många gånger den har snurrat!

Har den bara snurrat en gång, ja då är det nåt galet med loopvillkoret, annars är det nåt annat (hur du returnerar svaret förmodligen).

Om loopen körs så många gånger som den ska skulle jag rekommendera att du tittar närmare på str, substr och myStr och skriver ut dessa på varje varv.

Är det något fel på loopvillkoret så skriv ut vad variablerna har för värde så du kan se varför det tar slut. Isolera loopvillkoren så du bara kör ett åt gången för att se vilket som spricker...

Tja, det är egentligen bara att köra på, och testa och testa, om och om igen, tills man ser vad det är man har missat, för kom ihåg: Datorn gör faktiskt det du säger åt den. Varken mer eller mindre.

AsaMedlem sedan dec. 20011 860 inlägg
#3

Håller ju på me det. Är ej jag som gjort koden så jag är inte nå inföstådd i detta.

JojoxxMedlem sedan juni 20004 308 inlägg
#4

Du kan banta ner det lite så här:

<%Function getNews(n)
	sFind = "<span class=""Verdana10"">"
	Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
	objHTTP.Open "GET", "http://www.expressen.se/expressen/jsp/polopoly.jsp?d=10&a=633", False
	objHTTP.Send
	str = objHTTP.responseText
	Set objHTTP = Nothing
	str = Right(str,Len(str)-InStr(str,sFind)+1-len(sFind))
	str = Left(str,InStr(str,"</span>")-1)
	a=split(str,"<br>")
	for i = 0 to Ubound(a)
		if i = n then
			exit for
		end if
		myStr=myStr+a(i)+"<br>"
	next
	getNews = myStr
End Function%>

<%=getNews(5)%>
AsaMedlem sedan dec. 20011 860 inlägg
#5

Ahh, funkar prima. Du kan sånt här eller? Tackar :) SKa se om jag kan få in så man får länkarna i vitt och target=_blank och https://www.expressen.se först i länkarna. Tror ej jag kan det... men kolla ska jag.

tydalMedlem sedan juni 20034 013 inlägg
#6

> Är ej jag som gjort koden så jag är inte nå inföstådd
> i detta.

Aj då, sånt brukar krångla till det. Jag tycker koden ser onödigt omständligt ut. Jag vet inte om det är VBScript som sätter gränserna, men det känns som att det borde vara enklare...

Hmm... *startar klockan*

<?php
  $arr = file("http://www.expressen.se/expressen/jsp/polopoly.jsp?d=10&a=633");
  for ($i = 0; strstr($arr[$i], '<span class="Verdana10">') === false; $i++);
  $arr[$i] = substr($arr[$i], 24);
  for (; $arr[$i] != "</span>\n"; $i++)
    echo(str_replace('"/', '"http://www.expressen.se/', $arr[$i]));
?>

Tog typ sju minuter att skriva ihop. Resultatet finns på:
http://www.tydal.nu/expressen.php

AsaMedlem sedan dec. 20011 860 inlägg
#7

Mmm, så därför ber man om hjälp här! Fast php är det ju inte jag bygger med. Är ju asp men kanske kan ändra till php.

tydalMedlem sedan juni 20034 013 inlägg
#8

Jag ser i koden du fick ovan att funktionen split finns i VBScript. Den är precis vad du behöver i såna här fall, för den delar upp en stor textmassa i mindre deler, så att du inte behöver hoppa runt en massa som i den första koden du hade. Med split så får du en sådan uppdelning att loopen får en rad åt gången, och då är det ju mycket lättare att plocka ut det man vill ha.

a = split(str, "<br>")

innebär alltså att strängen delas vid varje "<br>" (och att <br> därmed försvinner). Resultatet blir en array.

AsaMedlem sedan dec. 20011 860 inlägg
#9

Okej, men nu ska man få in sålänkarna blir vita och öppnas i nytt fönster och länkar till http://www.expressen.se.

Tid å hjälpa?

tydalMedlem sedan juni 20034 013 inlägg
#10

Jag började med asp, men tyckte det var så bökigt att när jag hörde talas om php så beslöt jag mig för att testa det och det är inget jag ångrar. Php är väldigt smidigt och det är lätt att göra det man vill. Fast att jag uppfattar det som ett väldigt uttrycksfullt och användbart språk kan ju ha att göra med att jag är programmerare och van att snacka med datorer. Jag har ju hört att "vanligt" folk tycker asp är enkelt.

AsaMedlem sedan dec. 20011 860 inlägg
#11

Har börjat kolla lite på php men det går sakta framåt!

tydalMedlem sedan juni 20034 013 inlägg
#12

Där borde du nog kunna använda delar av den kod du hade först. Stoppa in den här raden:

a(i) = Replace(a(i),"<a href="""," | <a class=""vit"" target=""_blank"" href=""http://www.expressen.se")

före raden:

myStr=myStr+a(i)+"<br>"

AsaMedlem sedan dec. 20011 860 inlägg
#13

Funkar precis som jag ville ha det. Vad tur att det finns mycket duktiga personer här på webForum. Supertack :)

tydalMedlem sedan juni 20034 013 inlägg
#14

Lugnt. Hojta gärna till nån gång på ICQ eller nåt om du känner för att lära dig lite mer php. Jag jobbar med utbildning.

AsaMedlem sedan dec. 20011 860 inlägg
#15

Okej, det ska jag göra. Tackar snälla du att du är så hjälpsam!

JojoxxMedlem sedan juni 20004 308 inlägg
#16

Själv gillar jag Perl, men jag ser det inte som en livsuppgift att omvända mina medmänniskor att använda det :) PHP, ASP, Perl osv, alla har sina fördelar. Jag använder dem alla, kanske inte så mycket PHP men det är mer en gammal vana. Ibland har man ju själv inte heller möjligheten att påverka miljön man arbetar i.

Men för att komma till punkt, med logiskt tänkande och lite programmeringsvana spelar inte språket så stor roll. Kör det som känns bäst, huvudsaken att det går framåt och att man drar nytta av erfarenheten.

medialabsMedlem sedan mars 20023 686 inlägg
#17

Jag skulle vilja presentera Aftonbladets och Dn.se nyheter, ni råkar inte har några scriptexempel på det? Skulle behövas..

AsaMedlem sedan dec. 20011 860 inlägg
#18

Jag gjorde så här:

<%Function Aftonbladet(n)
	sFind = "<br clear=""all"">"
	Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
	objHTTP.Open "GET", "http://www.aftonbladet.se/vss/telegram/0,1082,_852__o,00.html", False
	objHTTP.Send
	str = objHTTP.responseText
	Set objHTTP = Nothing
	str = Right(str,Len(str)-InStr(str,sFind)+1-len(sFind))
	str = Left(str,InStr(str,"<div align=""right"">")-1)
	a=split(str,"<br>")
	for i = 0 to Ubound(a)
		if i = n then
			exit for
		end if
                a(i) = Replace(a(i),"Alla nyheter på en sida","")
                a(i) = Replace(a(i),"<table width=""375"" cellpadding=""0"" cellspacing=""0"" border=""0"">","")
                a(i) = Replace(a(i),"<tr>","")
                a(i) = Replace(a(i),"<td bgcolor=""#000000"" ><font class=""vitfet"">&nbsp;sverige</font></td>","")
                a(i) = Replace(a(i),"</tr>","")
                a(i) = Replace(a(i),"<tr>","")
                a(i) = Replace(a(i),"<td height=""5""><img src=""/vinj/bas/trans1x1.gif"" width=""1"" height=""1"" alt="""" border=""0""></td>","")
                a(i) = Replace(a(i),"</tr>","")
                a(i) = Replace(a(i),"</table>","")
                a(i) = Replace(a(i),"<img src=""/vinj/bas/pil.gif"" width=""7"" height=""9"" border=""0"">","")
                a(i) = Replace(a(i),"<a href=""","<a class=""vit"" target=""_blank"" href=""http://www.aftonbladet.se")
  	        myStr=myStr+a(i)+"<br>"
	next
	Aftonbladet = myStr
End Function

Function DN(n)
	sFind = "<!-- SORTERING STOP -->"
	Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
	objHTTP.Open "GET", "http://www.dn.se/DNet/jsp/polopoly.jsp?d=591&dnIdShuttle=592", False
	objHTTP.Send
	str = objHTTP.responseText
	Set objHTTP = Nothing
	str = Right(str,Len(str)-InStr(str,sFind)+1-len(sFind))
	str = Left(str,InStr(str,"<!-- dv:")-1)
	a=split(str,"<br>")
	for i = 0 to Ubound(a)
		if i = n then
			exit for
		end if
                a(i) = Replace(a(i),"<font color=""#B7002E"">","<font color=""#ffffff""><b>")
                a(i) = Replace(a(i),"bgcolor=""#CC0033""","")
                a(i) = Replace(a(i),"<td width=""10"">&#149;&nbsp;</td>","")
                a(i) = Replace(a(i),"<a target=""_top"" href=""","<a class=""vit"" target=""_blank"" href=""http://www.dn.se")
  	        myStr=myStr+a(i)+"<br>"
	next
	DN = myStr
End Function%>

<%=Aftonbladet(100)%>
<br>
<%=DN(100)%>

100 är antal nyheter som ska visas.

medialabsMedlem sedan mars 20023 686 inlägg
#19

Tack Åsa :)

RGBMedlem sedan dec. 1999419 inlägg
#20

Tänkte bara upplysa om att DN rubrikerna finns tillgängliga i RSS-format; http://www.dn.se/DNet/jsp/polopoly.jsp?d=602&a=89777

272 ms totalt · 3 externa anrop · v20260731065814-full.7de19299
141 ms — hämta forumlista (db)
129 ms — hämta statistik (db)
133 ms — hämta tråd, inlägg och bilagor (db)