[ anakin14 @ 02.12.2010. 17:02 ] @
pokusavam da napravim aplikaciju za grupno postovanje na zidu facebooka (treba mi zbog marketinga).

Uzeo sam rucno 2000 adresa od osoba na cijim zidovima hocu da da postujem.
preko webbrowser kontrole ulazim u jednu po jednu.
E sada imam problem - nikako ne mogu da skuzim kako da ubacim poruku i link u mesto za poruku i submitujem?

pokusavam sa webbrowser.document.getelementbyid ali ne znam kako da identifikujem element koji mi treba?

da li mozda neko ima soluciju?

hvala puno i pozdrav!
[ deerbeer @ 03.12.2010. 20:38 ] @
Lakse ti je da uradis preko HttpWebRequest i rucno posaljes POST request
sa parametrima koji su potrebni .

[ sallle @ 03.12.2010. 20:59 ] @
preko fiddlera analiziraj kakvi zahtevi idu prilikom postovanja necega na wall-u, i onda to simuliraj ko sto deerbeer rece sa httpwebrequest.

mozes da pogledas i facebook-ove apije, mozda imaju nesto za postavljanje na wall-u (mada verovatno nema nista, jer bi u suprotnom aplikacije divljale :))...
[ anakin14 @ 03.12.2010. 21:58 ] @
a sam do sada pokusavao da nadjem input i submit button ali to je izgleda nemoguce jer je facebook sakrio tagove na iframe-u na kome se nalazi input za poruku koja treba da izadje na wall-u sto je i logicno, da nije tako ( da moze da se kontrolise kao recimo log in forma) svako dete bi znalo da napravi faceboog wall poster. Sada mi je palo napamet ovo resenje:

1) imam bazu url-a koji su stranice prijatelja na cijim zidovima treba da se postavi poruka
2) za svaku adresu, webbrowser otvara stranicu
3) e sad posto nije moguce naci input za poruku na zidu mislio sam da simuliram klik misa fizicki na taj input u webbrowser-u i da simuliram paste akciju koja ce uneti text.

pre toga cu pogledati vase predloge i webrequest klasu, napominjem da se prvi put do sada susrecem sa webbrowser kontrolom i kodom koji ima veze sa "internetom" tako da moram malo da pogledam gradivo ;)
[ anakin14 @ 04.12.2010. 07:51 ] @
Code:
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
       postdata("http://www.facebook.com/ajax/updatestatus.php?__a=1", _
       "action=PROFILE_UPDATE&profile_id=1563964051&status=z" & STATUS & " & _ 
        target_id=560692823&app_id=&&  composer_id=c4cf9ecf8826c75127813708&hey_kid_im_a_composer=true& _
        display_context=profile&post_form_id=ab9062ba2d05c3f1c7877384e4cf5a79& _
        fb_dtsg=lWSzz&lsd&_log_display_context=profile&ajax_log=1&post_form_id_source=AsyncRequest", _
        New System.Net.CookieContainer)
    End Sub
    
Public Function postdata(ByRef url As String, ByVal post As String, ByVal cookie As System.Net.CookieContainer)        Dim request As HttpWebRequest
        Dim response As HttpWebResponse
        request = CType(WebRequest.Create(url), HttpWebRequest)
        request.ContentType = "application/x-www-form-urlencoded"
        MsgBox(post)
        request.ContentLength = post.Length
        request.Method = "POST"
        request.AllowAutoRedirect = False
        Dim requeststream As Stream = request.GetRequestStream
        Dim postbytes As Byte() = Encoding.ASCII.GetBytes(post)
        requeststream.Write(postbytes, 0, postbytes.Length)
        requeststream.Close()
        response = CType(request.GetResponse(), HttpWebResponse)
        Return New StreamReader(response.GetResponseStream()).ReadToEnd()
    End Function


Pokusao sam ovako ali nece da radi, postdata sam dobio preko tampera. Da li neko moze da me usmeri malo gde gresim?
hvala!
[ Shadowed @ 04.12.2010. 08:04 ] @
Verovatno moras prvo da se ulogujes na fb. Na slican nacin posaljes podatke za login, onda ti on posalje cookie pa ti zapamtis cookie i saljes ga kada radis sta vec radis.
[ anakin14 @ 04.12.2010. 11:21 ] @
LOGOVANJE

Code:
Dim url As String = "https://login.facebook.com/login.php?login_attempt=1"
        Dim postdata As String = "charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&lsd=om3WM&locale=sr_RS&email=USER%40sbb.co.yu&pass=PASS&persistent=1&default_persistent=1&charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&lsd=om3WM"
        Dim tempcookies As New CookieContainer
        Dim encoding As New UTF8Encoding
        Dim bytes As Byte() = encoding.GetBytes(postdata)

        Dim postreq As HttpWebRequest = DirectCast(WebRequest.Create("https://login.facebook.com/login.php?login_attempt=1"), HttpWebRequest)
        postreq.Method = "POST"
        postreq.KeepAlive = True
        postreq.CookieContainer = tempcookies
        postreq.ContentType = "application/x-www-form-urlencoded"
        postreq.Referer = "https://login.facebook.com/login.php?login_attempt=1"
        postreq.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"
        postreq.ContentLength = bytes.Length

        Dim postreqstream As Stream = postreq.GetRequestStream()
        postreqstream.write(bytes, 0, bytes.Length)
        postreqstream.Close()
        Dim postresponse As HttpWebResponse

        postresponse = DirectCast(postreq.GetResponse(), HttpWebResponse)
        tempcookies.Add(postresponse.Cookies)
        logincookie = tempcookies


POSTOVANJE

Code:
 Dim postmessage As String = TextBox4.Text
        Dim url As String = "http://www.facebook.com/ajax/updatestatus.php?__a=1"
        Dim post As String = "action=PROFILE_UPDATE&profile_id=1563964051&status=z" & postmessage & "&target_id=560692823&app_id=&&  composer_id=c4cf9ecf8826c75127813708&hey_kid_im_a_composer=true& display_context=profile&post_form_id=ab9062ba2d05c3f1c7877384e4cf5a79&fb_dtsg=lWSzz&lsd&_log_display_context=profile&ajax_log=1&post_form_id_source=AsyncRequest"

        Dim request As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
        request.ContentType = "application/x-www-form-urlencoded"
        request.CookieContainer = logincookie
        request.ContentLength = post.Length
        request.Method = "POST"
        request.AllowAutoRedirect = False

        Dim requeststream As Stream = request.GetRequestStream
        Dim postbytes As Byte() = Encoding.ASCII.GetBytes(post)
        requeststream.Write(postbytes, 0, postbytes.Length)
        requeststream.Close()



response od postovanja je prazan.
gde gresim?
[ deerbeer @ 04.12.2010. 15:59 ] @
Probaj postdata da pretvoris u niz bajtova a u ContentLenght setujes onda duzinu tog niza kao sto si uradio kod logovanja
koje ti pretpostavljam radi .
Obicno poziv ne uspe ako se ne upise tacan broj bajtova u requestu jer tebi stoji string.Lenght
sto za unicode karaktere nije isto sto i byte lenght .
[ anakin14 @ 05.12.2010. 08:54 ] @
Code:
   Dim postmessage As String = TextBox4.Text
        Dim url As String = "http://www.facebook.com/ajax/updatestatus.php?__a=1"
        Dim post As String = "action=PROFILE_UPDATE&profile_id=1563964051&status=z" & postmessage & "&target_id=560692823&app_id=&&  composer_id=c4cf9ecf8826c75127813708&hey_kid_im_a_composer=true& display_context=profile&post_form_id=ab9062ba2d05c3f1c7877384e4cf5a79&fb_dtsg=lWSzz&lsd&_log_display_context=profile&ajax_log=1&post_form_id_source=AsyncRequest"
        Dim encoding As New UTF8Encoding
        Dim postbytes As Byte() = encoding.GetBytes(post)
        Dim request As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
        request.ContentType = "application/x-www-form-urlencoded"
        request.CookieContainer = logincookie
        request.ContentLength = postbytes.Length
        request.Method = "POST"
        request.AllowAutoRedirect = False

        Dim requeststream As Stream = request.GetRequestStream

        requeststream.Write(postbytes, 0, postbytes.Length)
        requeststream.Close()

        Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
        Dim reader As New StreamReader(response.GetResponseStream())
        Dim theusercp As String = reader.ReadToEnd

        RichTextBox3.Text = theusercp
        TextBox3.Text = "560692823"


ovako?

ne nece da radi, a izgleda da ne radi ni logovanje, kada povezem sa webbrowser kontrolom logovanje - na:

Code:
 Dim postreqreader As New StreamReader(postresponse.GetResponseStream())
   Dim thepage As String = postreqreader.ReadToEnd
        RichTextBox1.Text = thepage


u username inputu se pojavi username, u passwordu ostane prazno a stranica da poruku vas browser ne podrzava cookies.
Da li neko zna gde gresim?
[ mmix @ 05.12.2010. 17:28 ] @
Zar nema facebook neki web servis? Ako nema -> FAIL.
[ ravni @ 23.12.2010. 20:54 ] @
ja bih rekao da je fail za pokretaca teme jer to sto je on zamislio nece da moze.

pretpostavimo da uspe da se uloguje i pretpostavimo da provali kako da popuni tekstbox i 'klikne' na dugme post
koliko wallpostova ce uspeti da odradi pre nego sto ga fb provali da radi nesto sumnjivo? 5? 50? 100?

onda ce da mu suspenduju profil i moze da se slika.

back to drawing board za marketing odeljenje
[ Dejan Carić @ 24.12.2010. 02:52 ] @
Ovo je najlakše da se uradi preko Facebook JavaScript SDK.
http://developers.facebook.com...cript/fb.connect.streampublish
[ w3bl0rd @ 24.12.2010. 07:15 ] @
Najjednostavnije preko http://watin.sourceforge.net/ staviš neki random time da posta svakih 5-10-15min tako da te ne skuže ovi iz faceooka i trebalo bi funkcionirat, sve u svemu 15min posla, 5 na skidanje i instaliranje watINa :))
watIN je .NET kontrola za upravljanje browserima :))
[ dejanet @ 24.12.2010. 08:24 ] @
Kod tog servisa se relativno brzo dolazi do "..you have exceeded posting quota". Slicno je i kod google-a ukoliko nemati neki "premium" paket (konkretno ako neko planira newsletter preko maila, a toliko je firmi preslo na gmail klijent, nista od toga).

Nema dzabe ni kod babe..