webForumDet fria alternativet

Nyheter mha ASPTear??

ASP

5 svar · 413 visningar · startad av Gimbo

Medlem sedan dec. 20001 626 inlägg
Frågan#1

Hejsan!

Jag har sett sidor som gör detta:
De hämtar specifika nyheter från olika nättidningar till deras sida, listar kanske 100ord från den artikeln och sedan har de en länk, läs mer, som länkar direkt till den artikeln. Det är bara vissa artiklar som jag vill ska listas på min sida, dvs artiklar som har ett speciellt ord... Hur går man tillväga för att göra detta, har hört ngt om komponenten ASPTear, är den svår att använda??

Medlem sedan aug. 2002207 inlägg
#2

Här kanske är onödigt med kod, men den visar hur man gör för att ta information från andra sidor (i detta fall DN).

' Hämtar se senaste nyheterna från DN.se
' skrivet av Pär Thernström, [email]feather@home.se[/email]
' 2002-05-28: Första versionen
' 2002-05-28: Visade en nyhet för lite
' 2002-06-02: Kan visa alla nyheter i en enda sträng

' eftersom samurize just nu inte fixar radbrytningar så är det lite knäppt gjort det här, men det funkar ;)

' ...och allt till musiken av:
' + Glenn_Underground -- The Jerusalem EP
' + Kent -- Vapen Och Ammunition
' + Matthew Herbert -- Bodily Functions

function nyhet0
	nyhet0 = getNews(0)
end function

function nyhet1
	nyhet1 = getNews(1)
end function

function nyhet2
	nyhet2 = getNews(2)
end function

function nyhet3
	nyhet3 = getNews(3)
end function

function nyhet4
	nyhet4 = getNews(4)
end function

function nyhet5
	nyhet5 = getNews(5)
end function

function nyhet6
	nyhet6 = getNews(6)
end function

function nyhet7
	nyhet7 = getNews(7)
end function

function nyhet8
	nyhet8 = getNews(8)
end function

function nyhet9
	nyhet9 = getNews(9)
end function

function nyhet10
	nyhet10 = getNews(10)
end function

' alla nyheter
function nyhetAlla
	nyhetAlla = getNews(-1)
end function

' vilket nyhet = 0 för huvudrubriken, 1-10 för respektive annan nyhet (flera av de sista är troligtvis tomma..)
function getNews(vilkenNyhet)

	On Error Resume Next 

	' hämta in hela sidan
	strHelaSidan = BinToText(GetHTMLBin("http://www.dn.se/"), 35000)

	' huvudnyheten
	if vilkenNyhet = 0 then

		' slänger in alla nyheter som är snäppet mindra än största
		' sjävla nyhetsrubriken ligger innanför första <a href...></a>...
		arrNyheter = split(strHelaSidan, "<span class=""rubrik1"">")
		
		' välj ut den nyhet vi vill ha
		strNyhet = arrNyheter(1) ' bara en huvudnyhet
		
	end if

	' de mindra nyheterna
	if vilkenNyhet > 0 then
	
		' slänger in alla nyheter som är snäppet mindra än största
		' sjävla nyhetsrubriken ligger innanför första <a href...></a>...
		arrNyheter = split(strHelaSidan, "<span class=""rubrik2"">")
		
		' välj ut den nyhet vi vill ha
		if vilkenNyhet <= UBound(arrNyheter) then
			strNyhet = arrNyheter(vilkenNyhet)	
		end if
	
	end if
	
	' lika för alla nyheter, utom då vi ska hämta alla samtidigt
	if strNyhet <> "" and  vilkenNyhet <> -1 Then

	
		' ta bort länk å sånt (om det finns)
		strNyhet = mid(strNyhet, InStr(strNyhet, ">")+1)
		strNyhet = left(strNyhet, InStr(strNyhet, "<")-1)
		
		' fixa åäö
		strNyhet = fixHTMLcodes(strNyhet)	
		
	elseif vilkenNyhet <> -1 then
		'strNyhet = "Ingen nyhet"
		strNyhet = ""
	end if

	' alla nyheter
	if vilkenNyhet = -1 then

		' ta först ut "ettan"
		arrNyheterFirst = split(strHelaSidan, "<span class=""rubrik1"">")
		
		' ta ut alla nyheter av andra graden
		arrNyheter = split(strHelaSidan, "<span class=""rubrik2"">")
		
		' ersätt första elementet i arrayen med "ettan" (det är ingen nyhet på första platsen ändå)
		arrNyheter(0) = arrNyheterFirst(1)
		
		' in med alla i en enda sträng
		for i = 0 to UBound(arrNyheter)
			arrNyheter(i) = mid(arrNyheter(i), InStr(arrNyheter(i), ">")+1)
			arrNyheter(i) = left(arrNyheter(i), InStr(arrNyheter(i), "<")-1)
			arrNyheter(i) = fixHTMLcodes(arrNyheter(i))
			strNyhet = strNyhet & " | " & arrNyheter(i)
		next

	end if
		
	getNews = strNyhet
	
end function

' ersätter några html-koder
function fixHTMLcodes(inStr)

	' ny rad strular till det
	inStr = replace(inStr, "<br>", " ")	
	inStr = replace(inStr, vbLf, "")
	inStr = replace(inStr, vbCr, "")

	' blandade tecken
	inStr = replace(inStr, "&aring;", "å")
	inStr = replace(inStr, "&auml;", "ä")
	inStr = replace(inStr, "&ouml;", "ö")
	inStr = replace(inStr, "&Aring;", "Å")
	inStr = replace(inStr, "&Auml;", "Ä")
	inStr = replace(inStr, "&Ouml;", "Ö")
	inStr = replace(inStr, "&aacute;", "á")
	inStr = replace(inStr, "&quot;", """")
	inStr = replace(inStr, "&quot;", """")	
	
	fixHTMLcodes = inStr
	
end function

' kod för att få bl.a. åäö att funka
' this code from [url]http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=128[/url]

    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '        Function to return binary data
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Function GetHTMLBin(strURL)
    		
    		On Error Resume Next 
    		
        Dim objXMLHTTP, strReturn
        Set objXMLHTTP = CreateObject("Microsoft.XMLHTTP")

        objXMLHTTP.Open "GET", strURL, False
        objXMLHTTP.Send Cstr(Rnd())

        GetHTMLBin = objXMLHTTP.responseBody
        Set objXMLHTTP = Nothing
    End Function

    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '        Function to convert binary data to text
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Function BinToText(varBinData, intDataSizeInBytes)    ' as String
    
    		On Error Resume Next 
    		
        Const adFldLong = &H00000080
        Const adVarChar = 200
        Set objRS = CreateObject("ADODB.Recordset")

        objRS.Fields.Append "txt", adVarChar, intDataSizeInBytes, adFldLong
        objRS.Open

        objRS.AddNew
        objRS.Fields("txt").AppendChunk varBinData
        BinToText = objRS("txt").Value

        objRS.Close
        Set objRS = Nothing
    End Function

Hoppas att den kan hjälpa dig!

Medlem sedan dec. 20001 626 inlägg
#3

Tackar...ska ta o studera den koden, men det var inte riktigt så jag hade tänkt mig, jag hade tänkt mig mer som så:

att om någon nättidning (DN, Expressen eller aftonbladet) skriver ngt om tigrar så skall den nyheten listas på min sida om inte så hämtar den inga nyheter, och sedan skall det finnas läs mer, vilket länkas till artikeln som öppnas i nytt fönster...

jag har hört att detta går att göra med ASPTear, stämmer det om så är fallet är det ngn som kan ställa upp med lite kod :-)

Medlem sedan juni 200032 967 inlägg
#4

Var ska det skrivas om tigrar? Bland de senaste nyheterna? Eller var som helst?

Du måste först hämta informationen för att kunna avgöra om det står något om tigrar i den. Hämta med en kod som Denniz' ovan, och kolla det du får av den om det nämns något om tigrar.

(Du behöver alltså inte använda ASPTear, utan du kan göra det som i koden ovan med XMLHTTP. Om du vill använda ASPTear istället finns väl exempelkod på tillverkarens hemsida?)

Medlem sedan dec. 20001 626 inlägg
#5

det skall skrivas bland de senaste nyheterna och sedan skall det finnas ett arkiv med alla nyheter... måste man inte hämta informationen till sin databas för att kunna göra ett arkiv?? jag e inte så haj på d här, hoppas ni kan hjälpa mig med det, en sak till är inte ASPTear mycke enklare med mindre kod??

Medlem sedan juni 200032 967 inlägg
#6

Nja.

Den största delen av koden ovan är till för att parsa informationen du får tillbaka. Du måste ju analysera den html du får tillbaka. Vad du sen gör med informationen är ju upp till dig. Skicka till webbläsare, skriv till databas, etc.

Om du använder ASPTear istället tjänar du möjligtvis ett par rader mot den här koden som använder XMLHTTP.

Dessutom är ASPTear en komponent som kostar pengar, och XMLHTTP ligger med i Windows 2000, så en W2k-server stödjer sannolikt det utan extra installationer och kostnader.

Mvh,

753 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
134 ms — deklarationer (db)
130 ms — hämta statistik (db)
219 ms — hämta tråd, inlägg och bilagor (db)
394 ms — ändringar (db)