webForumDet fria alternativet

mission impossible xmlHTTP?

4 svar · 632 visningar · startad av Gimbo

GimboMedlem sedan dec. 20001 626 inlägg
#1

Tja,

nu vill man kanske göra mission impossible men, kan man ta ut följande bildspel via xmlhttp?
http://expressen.se/index.jsp?d=2095

jag använder mig utav följande kod men får det inte att fungera, dvs jag kan varken få ut samtliga bildspel, och när jag gjort det så får jag inte popupen att fungera??

<%
Function kandisar(n)
	sFind = "<table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""375"">"
	Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
	objHTTP.Open "GET", "http://expressen.se/index.jsp?d=2095", 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,"<hr size=""1"" noshade width=""375"" color=""#cccccc"">")-30)
	a=split(str,"<br>")
	for i = 0 to Ubound(a)
		if i = n then
			exit for
		end if
                a(i) = Replace(a(i),"<a href="".*"""," ")
                a(i) = Replace(a(i),"</a>"," ")

  	        myStr=myStr+a(i)+"<br>"
	next
	kandisar = myStr
End Function
%>

ngn som kan hjälpa?

thresholdMedlem sedan maj 20068 inlägg
#2

Sv: mission impossible xmlHTTP?

Hej,

till saker som dessa är Regular Expressions ganska bra att använda. Den här koden fungerar så som expressens sida ser ut just nu - men om de ändrar för mycket i html-koden så kommer förmodligen detta inte att fungera.

Observera också att detta endast är testat på den nuvarande sidan - det är nog en bra idé att vänta på att sidan uppdateras, och testa scriptet då igen för att se att det verkligen fungerar som det ska

<%

Function kandisar(n)
	Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
	objHTTP.Open "GET", "http://expressen.se/index.jsp?d=2095", False
	objHTTP.Send
	str = objHTTP.responseText
	Set objHTTP = Nothing
 ' Ta bort alla radbrytningar
 str = replace(str, vbcrlf, "")
 str = replace(str, vbcr, "")
 str = replace(str, vblf, "")
 
 Dim Re         ' RegExp-objektet
 Dim htmlBuffer ' Kommer att innehålla HTML-koden som ska returneras av funktionen

 ' Skapa ett reguljärt uttryck för att hämta informationen
 ' Vi använder två stycken här för att hämta bild, rubrik och länk
 reg = "(?:<a href=""Javascript:PopWin\('(\/ego\/[^']*)',[^\)]*?\);""><img src=""([^""]+)""[^>]+><\/a><\/td>"
 reg = reg &  "|<td valign=""top""><a href=""Javascript:PopWin\('(\/ego\/[^']*)',[^\)]*?\);"">([\s\S]*?)</span>([\s\S]*?)<br><\/span>([\s\S]*?)<br><\/a><\/span>)" '
     

 Set Re = New RegExp ' Skapa ett regexp objekt
 Re.Pattern = reg    ' Tilldela sökmönstret
 Re.Global = true
 Re.IgnoreCase = True
 htmlBuffer = ""
 i =0

 set m = Re.Execute(str) ' Sök!
 For Each objMatch in m ' För varje träff...

  If i Mod 2 =0 then   ' Hämta bildinfo (varannan träff innehåller bild+länk, varannan rubrik+länk)
   imgSrc = "http://www.expressen.se" & objMatch.Submatches(1)
  Else                 ' Hämta övrig info (rubrik och länk)
   strPopupURL = "http://www.expressen.se" & objMatch.Submatches(2)
   strHeader = objMatch.Submatches(4)
   
   '** Bygg ihop den HTML-kod som ska returneras
   htmlRow = "<table border=1>"
   htmlRow = htmlRow & "<tr><th>Rubrik:</th><td>" & strHeader & "</td></tr>"
   htmlRow = htmlRow & "<tr><th>Bild:</th><td><img src='" & imgSrc & "' /></td></tr>"
   htmlRow = htmlRow & "<tr><th>URL:</th><td><a href='" & strPopupURL & "' target=_blank>" & strPopupURL & "</a></td></tr>"
   htmlRow = htmlRow & "</table>"
   htmlRow = htmlRow & "<hr>"

   htmlBuffer = htmlBuffer & htmlRow
  End If
 i = i + 1
 If n > 0 and n = (i/2) Then Exit For ' Hämta bara så många vi vill ha
 Next
	kandisar = htmlBuffer
End Function

response.write kandisar(5) ' Hämta fem st.

%>

Mvh
David

GimboMedlem sedan dec. 20001 626 inlägg
#3

det var bland det GRYMMASTE jag sätt, skit stor tack mannen, men är det möjligt att placera 2 bilder bredvid varandra och sedan radbrytning, eller blir det för krångligt?

thresholdMedlem sedan maj 20068 inlägg
#4

Hej, kul att det uppskattades :)

Ja, du kan ju i princip presentera resultatet på precis vilket sätt du vill. Scriptet plockar ju ut de enskilda variablerna imgSrc, strPopupURL och strHeader - sedan är det bara att sy ihop lite HTML-kod av det (som sker i htmlRow-variabeln i scriptet). En enkelt variant av hur man skulle kunna visa på per rad skulle kunna vara så här:

' ------- 8<--- avklippt kod----8<---------
   '** Bygg ihop den HTML-kod som ska returneras
   htmlRow = "<a href=""" & strPopupURL & """ target=_blank><img src='" & imgSrc & "' /></a>"
   If (i+1)/2 Mod 2=0 Then htmlRow = htmlRow & "<br >"
   htmlBuffer = htmlBuffer & htmlRow
  End If
' ------- 8<--- avklippt kod----8<---------

Men det är ju bara att testa för att få fram det som du vill ha det.

/David

GimboMedlem sedan dec. 20001 626 inlägg
#5

man tackar! förresten fick du mitt privata mess?

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)