Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[UDF] fbtp - FaceBook Transfer Protocol


wojtek333314

Rekomendowane odpowiedzi

Opublikowano

Witam ! :)

Dziś do zaprezentowania mam UDF który robiłem jakieś 2 dni i wyniki są takie, że nie warto tego używać ! :P

Początkowo miało służyć jak TCP/IP tyle,że zamiast znania numeru IP wystarczyłby link do konta fb, czy ID facebookowe ale jak to z ie wyszlo za wolno...

Wstawiam ... bo czemu nie ? W sumie fbtp - nawet fajnie brzmi , zawsze do jakiegoś prostego spamera można użyć i będzie szybko i łatwo :)

 

Więc oddaję do użytku funkcje:

-logowania

-pobierania aktywnych uzytkownikow z listy

-wysylania wiadomosci

-wylogowania

-tworzenia socketow - gniazd dzieki czemu mozna pisac do ilu sie osob chce jednoczesnie

-pisania z osobami z listy znajomych aktywnych jak i poza nia

-otrzymywania ID na podstawie linku do profilu

-odbierania wiadomosci ostatniej od utworzonego polaczenia

 

 

Wiecej w kodzie UDF:

 

 


#include <IE.au3>
#include <string.au3>
#include <Array.au3>

;~ _fbtp_start($widocznosc)
;~ wlacza iexplorer , oraz deklaruje globalna zmienna socket - ktora jest tablica polaczen
;~ argument $widocznosc okresla widocznosc eplorera. 0(domyslny) - niewidoczny, 1 - widoczny

;~ _fbtp_login($login,$haslo)
;~ Loguje do facebooka za pomoca podanego loginu i hasla.

;~ _fbtp_logout()
;~ Wylogowuje z facebooka

;~ _fbtp_quit()
;~ Wylacza internet explorera

;~ _fbtp_activefriendslist()
;~ Zwraca tablicę ,która jest tablica aktywnych 'przyjaciół'. [0] - Imie i nazwisko , [1] - jego numer ID, niezbedny do polaczen (!)


;~ _fbtp_connect_direct($ID)
;~ Laczy sie (otwiera zakladke z czatem) do podanego uztykownika facebooka (kazdy ma swoj identyfikator i to wlasnie go trzeba wstawic , mozemy go
; uzyskac z linku do profilu za pomoca funkcji _fbtp_getID_byurl() )
;~ Podlaczony dodaje sie do tablicy polaczen $socket, gdzie jest kolejna wartoscia
;~ UWAGA: przypisujac sobie do tej funkcji zmienna mozemy na niej operowac. Przyklad:
;~ $jakis_ktos=_fbtp_connect_direct(0000011124211)
;~ _fbtp_send($jakisktos,'haha')


;~ _fbtp_send($handle_ID,$tresc,$time_freeze = 400)
;~ Wysyla do podanego uztywkonika, wiadomosc o danej i tresci i czeka dana ilosc czasu (na zaladowanie strony , czemu nie ieloadwait()? bo sie nie da...)
;~ Pierwszy argument to uchwyt stworzony jak w przykladzie funkcji _fbtp_connect_direct()


;~ _fbtp_connects_refresh()

;~ UWAGA: Czasochlonna funkcja , ale sluzy tylko do stworzenia polaczania. Słowem: zanim program zacznie pracowac minie jakies plus minus 10s na przygotowanie
;~ wszystkiego...a potem leci juz szybko wszystko 

;~ _fbtp_recv($handle_ID)
;~ Zwraca ostatnio otrzymaną wiadomosc od $handle_ID czyli stworzonego uchwytu istniejacego polaczenia (np. przez connect_direct() )
;~
;~ _fbtp_getID_byurl($url)
;~ Zwraca ID uzytkownika po podaniu jego linka do facebooka (obojetnie czy to mobilefacebook czy tradycyjny). Funkcja nie dziala przy
;~ kontach filmow chyba itp. fikcyjnych ogolnie ,przynajmniej tak na testach mialem




func _fbtp_start($widocznosc=0)
Global $ie = _IECreate('m.facebook.com',1,$widocznosc,1,1)
Global $socket[1]
EndFunc

func _fbtp_login($login,$haslo)
$login_pole = _IEGetObjByName($ie,'email')
$haslo_pole = _IEGetObjByName($ie,'pass')
$login_button = _IEGetObjByName($ie,'login')

_IEFormElementSetValue($login_pole,$login)
_IEFormElementSetValue($haslo_pole,$haslo)

_IEAction($login_button,'click')
_IELoadWait($ie)
EndFunc

func _fbtp_logout()
_IENavigate($ie,'m.facebook.com/logout.php?h=AfeGdUGqtHxA-HWe&t=1350739326&refid=8')
EndFunc

func _fbtp_quit()
Do
ProcessClose("iexplore.exe")
Until (ProcessExists("iexplore.exe")==0)
EndFunc








func _fbtp_activefriendslist()
_IENavigate($ie, 'http://m.facebook.com/buddylist.php?refid=8')
$BODY = _IEBodyReadHTML($ie)
$szukane=_StringBetween($BODY,'/chat/messages.php?id=','">')
dim $tablica[uBound($szukane)][2]


for $i = 1 to UBound($szukane)
$imie = _StringBetween($BODY,$szukane[$i-1]&'">','</a>')
$tablica[$i-1][0]=$imie[0]
$tablica[$i-1][1]=$szukane[$i-1]
Next
Return $tablica

EndFunc




func _fbtp_connect_direct($friend_ID)
Local $connections = UBound($socket)-1
__IENavigate($ie,"m.facebook.com/chat/messages.php?id="&$friend_ID,0,0x1000)

_fbtp_connects_refresh()

if UBound($socket)==$connections then
SetError(-2)
ConsoleWrite("Blad funkcji connects_refresh() w connect_dir")
Exit

ElseIf UBound($socket)-1>$connections Then
Return $socket[uBound($socket)-1]
EndIf

EndFunc


func _fbtp_send($handle_ID,$tresc,$time_freeze = 400) ;TIMEFReeze zalecam na 100 (dla 1MB neta bo na takim testuje nie gubi pakietów)
$okno_form = _IEGetObjById($handle_ID,"composerInput")
$send_bt = _IEGetObjByName($handle_ID,'send')

_IEFormElementSetValue($okno_form,$tresc)
_IEAction($send_bt,'click')


Sleep($time_freeze)
EndFunc






func _fbtp_connects_refresh($time=1200) ; czym wiekszy time tym wieksza szansa na prawidlowe zapisanie tablicy. IE ssie..zalecam time = 1000
Local $aIE[1]
$aIE[0] = 0

Local $i = 1

While 1
$oIE = _IEAttach("", "instance", $i)
If @error = $_IEStatus_NoMatch Then
ExitLoop
return 0
EndIf

ReDim $aIE[$i + 1]
$aIE[$i] = $oIE
$aIE[0] = $i
$i += 1
Sleep($time)
WEnd

ReDim $socket[uBound($aIE)]

for $i=0 to UBound($aIE)-1
$socket[$i]=$aIE[$i]
Next

return 1
EndFunc




func _fbtp_recv($handle_ID)
_IEAction($handle_ID,'refresh')
$html=_IEBodyReadHTML($handle_ID)
$s1=_StringBetween($html,'data-sigil="message-text"','</div>')
$s2=_StringBetween($s1[uBound($s1)-1],'<span>','</span>')
Return $s2[0]

EndFunc



func _fbtp_getID_byurl($url)

if (StringRegExp($url,'id=')==1 and StringRegExp($url,'&')==1) then
$out=_StringBetween($url,'id=','&')
Return $out[0]
Else


$url=StringRegExpReplace($url,'www.','m.')
Local $connections = UBound($socket)-1
__IENavigate($ie,$url,0,0x1000)

_fbtp_connects_refresh()

if UBound($socket)==$connections then
SetError(-2)
ConsoleWrite("Blad funkcji connects_refresh() w connect_dir")
Exit
EndIf

$tmp=$socket[uBound($socket)-1]

$html=_IEBodyReadHTML($tmp)
if (StringRegExp($html,'id='))==1 then
$out=_StringBetween($html,'id=','&refid')
Return $out[0]
EndIf


$obj=_IEGetObjByName($tmp,'target')
$out=_IEFormElementGetValue($obj)
_IEQuit($tmp)
ReDim $socket[uBound($socket)-1]
Return $out
EndIf

EndFunc











 

 

 

Prosty przyklad z objasnieniem:

 

#include "fbtp_final.au3"

_fbtp_start(1);1 bo chcemy wszystko widziec, zostaw puste dla ukrycia
_fbtp_login('login','haslo') ; wpisz swoje albo jakies konto dla jaj zrob

$ID=_fbtp_getID_byurl('http://m.facebook.com/profile.php?id=100004335605005&fref=search&ref=ts');ustala ID konta na podstawie url do profilu
$polaczenie_do_kogos=_fbtp_connect_direct($ID) ; jakies konto jakiegos chinczyka losowego...nie spamujcie go

;czyli tworze gniazdo o nazwie $polaczenie_do_kogos, ktore podlaczy sie do ID zwroconego z funkcji _fbtp_getID_byurl na podstawie linku do profilu
;tak wiem genialnie to zrobilem :P

_fbtp_send($polaczenie_do_kogos,"ah ciekawy film! Pozdro od MPC",300) ; wysylamy do wczesniej utworzonego polaczenia wiadomosc o danej tresci i odczekamy 300ms...dla zaladowania 
_fbtp_logout() ;wylogowuje
_fbtp_quit() ;zamyka IE


 

 

 

Pozdrawiam :)

Opublikowano

@UPDATE !

Nie wiedziałem, że mi się zechce ale :

 

+dodano funkcję _fbtp_getID_byurl() - otrzymywanie ID do polaczen na podstawie linka do profilu facebooka

+dodano funkcję _fbtp_recv() - odczytanie ostatniej wiadomosci z utworzonego polaczenia

+poprawiono szybkość działania skryptu (działa kilka razy szybciej ! :) )

+poprawiono tworzenie gniazd (operujemy na zmiennych które są utworzonym połączeniem , patrz _fbtp_connect_direct() )

Opublikowano

Screen ? Jak to ma dzialac w tle dla aplikacji , ale przez to ze facebook opoznia docieranie wiadomosci na czas to max mozna wyslac 1wiadomosc na sekunde ;/
I nic dalej z tym nie zrobie wiec zostawie jak jest, moze wrzuce jakis prosty skrypt w oparciu o taka wmiane danych serwera i clienta ;)

 

 

Ale jaja , udało mi się to odkopać w necie, jakie szczeście ,że to gówno napisałem!

Tak pisze dla siebie bo tu i tak nikt już nie zagląda :)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...