• 14-12-2010, 23:26:15
    #1
    'xml adres kısımı
    xmlAdres = "http://v1.iha.com.tr/v2/rss/NewsRSS.aspx"
    
    Set objXML = Server.CreateObject("Microsoft.XMLDOM") 
        objXML.Async = False 
        objXML.SetProperty "ServerHTTPRequest", True 
        objXML.ResolveExternals = True 
        objXML.ValidateOnParse = True 
    
    objXML.Load(xmlAdres) 
    If (objXML.parseError.errorCode = 0) Then 
    Set objRoot = objXML.documentElement
    If IsObject(objRoot) = False Then 
    response.write "<li>Connection Error!" 
    End If 
    
    i=1
    Set objItems = objRoot.getElementsByTagName("item") 
    For Each objItem in objItems
    Baslik=objItem.selectSingleNode("title").Text
    Link=objItem.selectSingleNode("link").Text
    Kisa=objItem.selectSingleNode("description").Text
    
    Baslik = Replace(Baslik,"'"," ")
    Set timsql = adoCon.ExeCute("Select baslik from tblHaberler where baslik='"&Baslik&"' ")
    
    If timsql.eof Then
    
    Yardim = Kisa
    Parca = Split(Kisa,"""")
    if 0 < ubound(Parca) then
    Resim = Parca(1)
    Resim = Replace(Resim,"mainpicture/","maintopheadline/")
    Resim = Replace(Resim,"i.iha.com","images.iha.com")
    
    else
    Resim = "http://i39.tinypic.com/33y74w3.gif"
    End If
    Kisa = Yardim
    
    
    Parca = Split(Kisa,">")
    if 0 < ubound(Parca) then
    Kisa = Parca(2)
    Kisa = Replace(Kisa,"</h3","")
    else
    Kisa = Baslik
    End If
    
    
    
    Set HTTP = Server.CreateObject("Microsoft.XMLHTTP" ) 
      HTTP.Open "Get" , Link, False 
      HTTP.SEnd 
    Sayfa_Al = HTTP.Responsetext 
    Set HTTP = Nothing 
    
    
    Basliyor = "<span id=""contextual"">"
    Bitiyor = "</span><br />"
      Basla = InStr(1,Sayfa_Al, Basliyor , 1) + Len(Basliyor ) 
      Bitir = InStr(Basla, Sayfa_Al, Bitiyor , 1) - Basla 
      Detay= Mid(Sayfa_Al, Basla, Bitir)
      Detay = Trim(Detay)
    
    
    Basliyor = "<title>"
    Bitiyor = "</title>"
      Basla = InStr(1,Sayfa_Al, Basliyor , 1) + Len(Basliyor ) 
      Bitir = InStr(Basla, Sayfa_Al, Bitiyor , 1) - Basla 
      Kategori= Mid(Sayfa_Al, Basla, Bitir)
      Kategori = Trim(Kategori)
    
    Parca = Split(Kategori,"-")  
    Kategori = Trim(Parca(1))
      
    
    tarih = SQLTarih(Date()) &" "& Hour(Now()) &":"& Minute(Now()) &":"& Second(Now())
    Yukarıdaki kodu açıklayabilecek bir arkadaş var mı? Asp ile bot yazma hakkında nette forumda detaylı bir bilgi bulamadım. Yukarıda iha haber den çekilen haberler listelenebiliyor. Peki bu kodun neresi ne anlama geliyor? bu botu diğer siteler için nasıl kullanmalıyız?

    Bu kodun neresinde, nasıl değişiklik yapılmalı ki, başka sitelerde de kullanabilelim. Teşekkürler...
  • 16-12-2010, 03:54:02
    #2
    Üyeliği durduruldu
    Bir XML Yapısı:

    <item>
    <title>Deneme Basligi</title>
    <link>http://www.siteadresi.com/deneme-basligi.html</link>
    <description>Deneme aciklaması vs.vs.</description>
    </item>

    <item>
    <title>Deneme Basligi 2</title>
    <link>http://www.siteadresi.com/deneme-basligi2.html</link>
    <description>Deneme aciklaması 2 vs.vs.</description>
    </item>

    bu şekildedir.

    xmlAdres kısmı veri çekilecek sitedir,

    Set objItems = objRoot.getElementsByTagName("item")

    burdaki item yazısı, örnekte gördüğünüz gibidir. "Item kategorisi altını seç" gibi yorumlanabilir.

    Baslik=objItem.selectSingleNode("title").Text
    Link=objItem.selectSingleNode("link").Text
    Kisa=objItem.selectSingleNode("description").Text

    geri kalanlarsa xmlde item tagları arasında kalan çekmek istediğiniz diğer bilgiler.

    XML Yapısını iyice araştırdıktan sonra kolay bir şekilde yapabilirsiniz.

    --

    resim kısmında, ilgili içerikteki resmi çekiyor, resim boş geliyorsa resimyok.gif gözüküyor,

    diğer kodlarda link taglarında ki linklere gidip, sitedeki diğer verileri çekip veritabanına kaydediliyor.

    Hemen yapabileceğiniz yada burdan anlatarak yapabileceğiniz birşey değil bu olay.

    Sürekli test, deneme yapmanız lazım.
    Kolay gelsin (not: lütfen msne ekleyip yardım istemeyiniz.)
  • 16-12-2010, 20:05:10
    #3
    Teşekkür ederim ancak asıl sorun bunlardan sonra gelen kodlarda. Deneme yapacam ama biraz bilgi sahibi olmam lazım. Bu konuda nette bilgi bulamadım. İyi çalışmalar...
  • 17-12-2010, 06:44:46
    #4
    Üyeliği durduruldu
    Belirttiğim gibi herşey sürekli deneme yapmaya bakıyor. İlk başlarda bende title vs. çekerek başladım. Söylediğiniz gibi bu konuda kaynak yok. Mantık çok basit. Sitenin kaynak koduna bağlanıp ordaki html kodlarından onu arındırıp, ilgili içeriği almak.

    Bunun içinde, mid, instr, split, replace gibi fonksiyonlar kullanacaksınız.

    Yol göstermesi bakımından, aynen c/p yapınız

    <%
    ' coded by ShN!
    ' https://www.r10.net/members/9879-sahinet.html
    Function GETHTTP(adres)
    Set StrHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP")
    StrHTTP.Open "GET" , adres, false
    StrHTTP.sEnd
    GETHTTP = StrHTTP.Responsetext
    Set StrHTTP = Nothing
    End Function
    
    function koru(shn)
    shn=replace(shn,"<title>","")
    koru = shn
    end function
    
    kaynak = GETHTTP("https://www.r10.net/asp/801672-asp-bot-detayli-aciklama-yardim.html") ' r10 da çekilecek konu :)
    
    baslik1=instr(kaynak,"<title>")
    baslik2=instr(kaynak,"</title>")
    baslik = mid(kaynak,baslik1,baslik2-baslik1)
    
    mesaj1=split(kaynak,"<div id=""post_message_")
    
    response.write "<b>Konu Başlığı : </b>" & koru(baslik) ' konunun başlığını çektik
    response.write "<hr>"
    
    for i = 1 to ubound(mesaj1) ' ## Mesajları Çekelim:
    mesaj2=split(mesaj1(i),"<div style=""margin-top: 10px"" align=""right"">")
    response.write mesaj2(0)
    response.write "<hr>"
    next
    %>
    kolay gelsin
  • 18-12-2010, 19:20:16
    #5
    Süper oldu peki bunu veritabanına yazdırabilir miyim? Nasıl yaparım bunu :S
  • 18-12-2010, 19:46:12
    #6
    <%
    ' coded by ShN!
    ' https://www.r10.net/members/9879-sahinet.html
    Function GETHTTP(adres)
    Set StrHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP")
    StrHTTP.Open "GET" , adres, false
    StrHTTP.sEnd
    GETHTTP = StrHTTP.Responsetext
    Set StrHTTP = Nothing
    End Function
    
    function koru(shn)
    shn=replace(shn,"<title>","")
    koru = shn
    end function
    
    kaynak = GETHTTP("http://sakarya.meb.gov.tr/tum_duyurular.asp") ' r10 da çekilecek konu :)
    
    baslik1=instr(kaynak,"<title>")
    baslik2=instr(kaynak,"</title>")
    baslik = mid(kaynak,baslik1,baslik2-baslik1)
    
    mesaj1=split(kaynak,"<td valign=""top"" >")
    
    response.write "<b>Konu Başlığı : </b>" & koru(baslik) ' konunun başlığını çektik
    response.write "<hr>"
    
    for i = 1 to ubound(mesaj1) ' ## Mesajları Çekelim:
    mesaj2=split(mesaj1(i),"</td>")
    response.write mesaj2(0)
    response.write "<hr>"
    next
    %>
    Çok teşekkür ederim. Yukarıdaki kodla gerekli linkleri çektim. Linkler aşağıdaki gibi olduğu için:

    <A HREF="duyuru_detay.asp?DyrID=1108" target="_self">Eğitim Yöneticisi Geliştirme Semineri(EYGEP)</A>


    linkler listelendi, ancak duyuru_detay.asp?DyrID=1108 yazan linki çektikten sonra http://sakarya.meb.gov.tr/duyuru_detay.asp?DyrID=1108 olarak veritabanına nasıl eklerim. Şimdiden çok çok teşekkür ederim...

    Şuan iha için kullanılan ve veritabanına yazabilen aşağıdaki kod çok güzel çalışıyor. Ben de sakarya meb den bilgileri çekip okulumun sayfasında yayınlamak istiyorum. Bunu yapmam mümkün mü Teşekkürler. Verdiğiniz kodlar çok açıklayıcı olmuş zahmet olacak ama bir de yukarıdaki kod göz atabilir misiniz. Çok çok teşekkürler....

    Çalıştığı gibi bir de veritabanına kayıt yapan kod :S

    'xml adres kısımı
    xmlAdres = "http://v1.iha.com.tr/v2/rss/NewsRSS.aspx"
    
    Set objXML = Server.CreateObject("Microsoft.XMLDOM") 
        objXML.Async = False 
        objXML.SetProperty "ServerHTTPRequest", True 
        objXML.ResolveExternals = True 
        objXML.ValidateOnParse = True 
    
    objXML.Load(xmlAdres) 
    If (objXML.parseError.errorCode = 0) Then 
    Set objRoot = objXML.documentElement
    If IsObject(objRoot) = False Then 
    response.write "<li>Connection Error!" 
    End If 
    
    i=1
    Set objItems = objRoot.getElementsByTagName("item") 
    For Each objItem in objItems
    Baslik=objItem.selectSingleNode("title").Text
    Link=objItem.selectSingleNode("link").Text
    Kisa=objItem.selectSingleNode("description").Text
    
    Baslik = Replace(Baslik,"'"," ")
    Set timsql = adoCon.ExeCute("Select baslik from tblHaberler where baslik='"&Baslik&"' ")
    
    If timsql.eof Then
    
    Yardim = Kisa
    Parca = Split(Kisa,"""")
    if 0 < ubound(Parca) then
    Resim = Parca(1)
    Resim = Replace(Resim,"mainpicture/","maintopheadline/")
    Resim = Replace(Resim,"i.iha.com","images.iha.com")
    
    else
    Resim = "http://i39.tinypic.com/33y74w3.gif"
    End If
    Kisa = Yardim
    
    
    Parca = Split(Kisa,">")
    if 0 < ubound(Parca) then
    Kisa = Parca(2)
    Kisa = Replace(Kisa,"</h3","")
    else
    Kisa = Baslik
    End If
    
    
    
    Set HTTP = Server.CreateObject("Microsoft.XMLHTTP" ) 
      HTTP.Open "Get" , Link, False 
      HTTP.SEnd 
    Sayfa_Al = HTTP.Responsetext 
    Set HTTP = Nothing 
    
    
    Basliyor = "<span id=""contextual"">"
    Bitiyor = "</span><br />"
      Basla = InStr(1,Sayfa_Al, Basliyor , 1) + Len(Basliyor ) 
      Bitir = InStr(Basla, Sayfa_Al, Bitiyor , 1) - Basla 
      Detay= Mid(Sayfa_Al, Basla, Bitir)
      Detay = Trim(Detay)
    
    
    Basliyor = "<title>"
    Bitiyor = "</title>"
      Basla = InStr(1,Sayfa_Al, Basliyor , 1) + Len(Basliyor ) 
      Bitir = InStr(Basla, Sayfa_Al, Bitiyor , 1) - Basla 
      Kategori= Mid(Sayfa_Al, Basla, Bitir)
      Kategori = Trim(Kategori)
    
    Parca = Split(Kategori,"-")  
    Kategori = Trim(Parca(1))
      
    
    tarih = SQLTarih(Date()) &" "& Hour(Now()) &":"& Minute(Now()) &":"& Second(Now())
    
    
    %>
    
    
    <%=Baslik%><br>
    <%=Kategori%><br>
    <%=Kategori%><br>
    <%=Kisa%><br>
    <%=Resim%><br>
    <%=Link%><br>
    <%=Detay%><br>
    
    <br><br><br>
    <hr>
    
    
    <%
    
    
    'Kategorilere göre ayarlama değişgeni
    if Kategori = "GÜNCEL" then
    kategori = 5
    End If
    
    
    Set gor = Server.CreateObject("ADODB.Recordset")
    sor = "Select * from tblHaberler order by haberID Desc"
    gor.Open sor,adoCon,1,3
    
    gor.AddNew
    gor("baslik") = Baslik
    gor("baslik_ID") = false
    gor("ozet") = kisa
    gor("haber") = Detay
    gor("kategori") = kategori
    gor("editor") = editor
    gor("resim") = resim
    gor("kucuk_resim") = resim
    gor("manset") = false
    gor("onemli") = false
    gor("kilit") = false
    gor("tarih") = tarih
    gor.Update
    gor.Close
    set gor=nothing
    
    
    Set Mn = adoCon.ExeCute("Select haberID,baslik from tblHaberler where Baslik='"&Baslik&"'")
    MnId = Mn("haberID")
    MnBaslik = Mn("baslik")
    
    Set gor = Server.CreateObject("ADODB.Recordset")
    sor = "Select * from tblMansetler "
    gor.Open sor,adoCon,1,3
    
    gor.AddNew
    gor("haber_id") = MnId
    gor("baslik") = MnBaslik
    gor("sira") = 1
    gor.Update
    gor.Close
    set gor=nothing
    
    
    End If
    timsql.close
    set timsql=nothing
    
    i=i+1
    if i=8  then
    Response.End
    End If
    
    Next: Set objItems=Nothing: Set objRoot=Nothing
    end if
    %>
  • 18-12-2010, 22:31:32
    #7
    Üyeliği durduruldu
    veritabanına kaydetmek için, response.write ile sayfaya yazdırırken aynı ya da direk veritabanına kaydetme kodunu yazabilirsiniz.

    yani response.write yazan yerin altına,

    set kayit = server.createobject("ADODB.recordset")
    sql="select * from tablonuz"
    kayit.open sql,baglanti,1,3
    kayit.addnew
    kayit("baslik")=koru(baslik)
    kayit.update

    gibi..

    Önemli Not: for döngüsü ile birden çok bilgiyi çekerken, bu bilgileri aynı tabloya kaydedemezsiniz. sürekli kendini güncelleyerek en sondaki veriyi kaydeder. Bunun için ayrı tablolara kaydetmekte fayda vardır.

    Kolay gelsin.
  • 20-12-2010, 19:13:29
    #8
    bu arada arakdaslar xml botlar pek fazla işe taramıyor. haber sitelerine bot yaparken xml den yani rss den veri çektiğinizde rss de haberin sadece özeti bulundugundan haberin özeti çıkar direk olarak haber cıkmaz.
    bunun için direk sayfadan çeken botlar yapmalısınız.
    ama buda işe yarar.
  • 20-12-2010, 20:16:35
    #9
    http://www.sanaldata.com/asp_ile_bot__yapimi-68-de.html

    Buraya bir göz at takılırsan yardımcı oluruz.