Avatar billede carstensuurland Nybegynder
15. august 2006 - 16:17 Der er 11 kommentarer og
1 løsning

Google: Anvendelse af gsafeeds

Hej Eksperter

På mit arbejde har vi en række internt googleservere. Disse indekserer vores eksterne sites.

Når vi opretter nye sider på vores eksterne sites, vil vi gerne have det således, at de bliver optaget i googles index med det samme. Til det formål kan man bruge et gsafeed som man sender til googleserveren.

Desværre får jeg hele tiden en http 400 fejl (Bad request) tilbage, når jeg poster mit feed.

Er der nogen der har erfaring med det (og har fået det til at virke?)
Avatar billede sjh Nybegynder
15. august 2006 - 16:25 #1
Så lad os se den kode du bruger til at poste med.. ellers er det jo lidt svært at finde din fejl..

og nu er det vel ikke fordi du først skal være logget ind hos google??
Avatar billede carstensuurland Nybegynder
15. august 2006 - 16:30 #2
Her følger den funktion der søger for at generere xml'en og uploade den til vores interne googleserver:

Public Function Upload() As Boolean
  Dim xmlSource As String
  xmlSource = ""
  xmlSource = "<?xml version=¤1.0¤ encoding=¤UTF-8¤ ?>" & _
              "<!DOCTYPE gsafeed PUBLIC ¤-//Google//DTD GSA Feeds//EN¤ ¤¤>" & _
              "<gsafeed>" & _
                "<header>" & _
                  "<datasource>mpi_feed</datasource>" & _
                  "<feedtype>full</feedtype>" & _
                "</header>" & _
                "<group>"

  Dim curURL As Variant
 
  '// mvarURLS indeholde X antal URL'er som skal indekseres
  For Each curURL In mvarURLS
    xmlSource = xmlSource & "<record url=¤" & CStr(curURL) & "¤ action=¤add¤ mimetype=¤text/html¤>" & _
                              "<content>" & _
                                "<![CDATA[" & _
                                  "<html><body><h1>Overskrift</h1>Hu hej hvor det går</body></html>" & _
                                "]]>" & _
                              "</content>" & _
                            "</record>"
  Next

  xmlSource = xmlSource & "</group>"
  xmlSource = xmlSource & "</gsafeed>"
  xmlSource = Replace(xmlSource, "¤", Chr(34))
 
  Dim curFeedGate As Variant
  Dim poster As MSXML2.XMLHTTP
  Set poster = New MSXML2.XMLHTTP
 
  '// mvarFeedGates indeholder X antal url'er til en given google feed gate - f.eks http://100.120.10.1:19900/xmlfeed
  For Each curFeedGate In mvarFeedGates
    curFeedGate = curFeedGate & "?feedtype=full&datasource=mpi_feed&data=" & URLEncode(xmlSource)
    poster.open "POST", CStr(curFeedGate), False, "jbsearchadmin", "fes10val"
    poster.send xmlSource
    Debug.Print poster.Status & " : " & poster.statusText
  Next
 
  Dim returnValue As Boolean
  returnValue = True
 
ExitPoint:
  Upload = returnValue
  Exit Function
 
ErrorHandler:
  returnValue = False
  Resume ExitPoint
End Function
Avatar billede carstensuurland Nybegynder
15. august 2006 - 16:32 #3
Og her er et eksempel på den XML der bliver postet:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE gsafeed PUBLIC "-//Google//DTD GSA Feeds//EN" "">
<gsafeed>
    <header>
        <datasource>mpi_feed</datasource>
        <feedtype>full</feedtype>
    </header>
    <group>
        <record url="http://www.minserver.dk/test/195868.asp" action="add"
            mimetype="text/html">
            <content><![CDATA[<html><body><h1>Overskrift</h1>Hu hej hvor det går</body></html>]]></content>
        </record>
    </group>
</gsafeed>
Avatar billede sjh Nybegynder
15. august 2006 - 17:21 #4
øh.. skal du ikke bare sende..

altså ikke:
poster.send xmlSource

bare :

poster.send

data=" & URLEncode(xmlSource) ' <-- du poster den jo her:
Avatar billede sjh Nybegynder
15. august 2006 - 17:34 #5
hmm.. nej du skal gøre sådan.. hvis curFeedGate er en url.. (http://100.120.10.1:19900/xmlfeed)

  For Each curFeedGate In mvarFeedGates
  Dim strData As String
    strData = "feedtype=full&datasource=mpi_feed&data=" & URLEncode(xmlSource)
    poster.open "POST", CStr(curFeedGate), False, "jbsearchadmin", "fes10val"
    poster.send strData
    Debug.Print poster.Status & " : " & poster.statusText
  Next
Avatar billede sjh Nybegynder
15. august 2006 - 17:40 #6
du skal mugligvis også sende Content-Type

fx. (er dog ikke sikker på det skal være application/x-www-form-urlencoded)
poster.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
Avatar billede sjh Nybegynder
15. august 2006 - 17:42 #7
noget i den stil...

poster.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
poster.send strData
Avatar billede carstensuurland Nybegynder
16. august 2006 - 08:37 #8
Hej sjh
Kom med et svar, så får du point.
Jeg har fundet fejlen. Mon kode er egentligt rigtig nok, men dét jeg poster har ikke fået tildelt et navn... dvs. at når min googleserver spørger til et bestemt element i det postede, så findes det ikke. Du får pointene for en god indsast :-)
Avatar billede keysersoze Ekspert
16. august 2006 - 09:44 #9
undskyld jeg blander mig og spørger - hvad dælen er en googleserver?
Avatar billede sjh Nybegynder
16. august 2006 - 09:45 #10
okææ.. du kan bar give mig 30 point..
Avatar billede carstensuurland Nybegynder
16. august 2006 - 09:48 #11
Nej nej... Du får fuldt hus :-)
Avatar billede sjh Nybegynder
16. august 2006 - 09:56 #12
carstensuurland Jamen så siger jeg da mange tak for point..

keysersoze tror det er den her:
http://code.google.com/enterprise/documentation/metadata.html
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
Kategori
Kurser inden for grundlæggende programmering

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