1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

UDF Tương tác với Facebook bằng WinHttp

Thảo luận trong 'Chia sẻ mã nguồn' bắt đầu bởi Nguyễn Quốc Tuấn, 3/8/16.

  1. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    @minhvnnhut Tải cái FB_Login_Ex ở #21 chạy thử xem được không ?
     
    ¶×há Núi and kamsamita1 like this.
  2. minhvnnhut

    minhvnnhut Thành viên mới
    • 3/6

    Tham gia ngày:
    28/10/16
    Bài viết:
    25
    Đã được thích:
    5
    Anh Huân Hoàng ơi ! em định trích cái FB_login ra để mỗi khi nhập user + pass facebook thì nó kiểm tra xem đúng ko thì phải làm sao ạ? em làm nãy giờ ko dc :'(
     
    kamsamita1 thích bài này.
  3. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    @minhvnnhut :

    Chạy request post đăng nhập FB, nếu tài khoản đúng thì sẽ trả về Cookie có m_user, sai thì không có:

    Mã (AutoIt):
    #include <_httprequest.au3>
    $Username = ''
    $Password = ''
    Local $Request = _HttpRequest(1, "https://m.facebook.com/login.php", "email=" & _URIEncode($Username) & "&pass=" & _URIEncode($Password))
    If Not StringInStr($Request, 'Set-Cookie: m_user=', 0, 1) Then MsgBox(4096, 0, 'Tài khoản không hợp lệ')
     
    P/S: Mới đầu cũng sợ tính làm chương trình dò acc mà nghĩ lại mỗi lần request rất mất thời gian nên thôi chắc không sao =))
     
    kamsamita1 thích bài này.
  4. Ngọc Yến

    Ngọc Yến Thành viên
    • 13/23

    Tham gia ngày:
    11/6/16
    Bài viết:
    24
    Đã được thích:
    27
    e có làm cái tool check acc fb sống.mấy cái đầu request lâu ,mấy cái sau ko hiểu sao nhanh lắm a à.nhưng mà e check ko dùng sock thì cũng die hết loạt acc nên cũng chả check nữa :v
     
    kamsamita1 and Huân Hoàng like this.
  5. minhvnnhut

    minhvnnhut Thành viên mới
    • 3/6

    Tham gia ngày:
    28/10/16
    Bài viết:
    25
    Đã được thích:
    5
    tiện thể cho em hỏi luôn nha anh ! em muốn học về winhttp ! nhưng mấy bài trên forum thì hơi khó hỉu anh ạ ! ko biết anh có video hướng dẫn ko cho em xin đi :)
     
    kamsamita1 thích bài này.
  6. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    Google đi bạn. Mình thì chỉ đọc trang UDF WinHttp trong autoscript.com, từ bài viết đến các câu hỏi và trả lời trong trang đó, rồi tự suy ra thôi
     
    kamsamita1 and tuoitre like this.
  7. dudinhthuan

    dudinhthuan Thành viên mới
    • 1/6

    Tham gia ngày:
    20/12/16
    Bài viết:
    9
    Đã được thích:
    7
    Sao mình không lấy list được bạn ơi. :(
     
    kamsamita1 thích bài này.
  8. Only Love

    Only Love Thành viên
    • 18/23

    Tham gia ngày:
    8/9/15
    Bài viết:
    69
    Đã được thích:
    59
    [​IMG]

    Mình chạy ngọt bạn êi.

    Code chuẩn mình lấy ra từ UDF đêi:

    Mã (AutoIt):
    #include <_HttpRequest.au3>
    #include <Crypt.au3>


    $user = 'tên đăng nhập'
    $Password = 'mật khẩu'

    $Handle = FB_Login_Ex($user, $Password)
    $List = FB_Group_List($Handle)
    _ArrayDisplay($List)



    Func FB_Group_List($Handle)
        If Not IsArray($Handle) Then Return SetError(1, '', False)
        Local $Request = _HttpRequest(2, 'https://www.facebook.com/bookmarks/groups/', '', $Handle[0])
        Local $ListFilter = StringRegExp($Request, 'BookmarkSeeAllEntsSectionController(.*?)</script>', 1)
        If @error Then Return SetError(2, '', False)
        Local $aRet = StringRegExp($ListFilter[0], '{id:"(\d+?)",name:"(.*?)",count:', 3)
        If @error Then Return SetError(3, '', False)
        Return $aRet
    EndFunc


    Func FB_Login_Ex($Username, $Password, $iRememberCookie = 1, $sPathSaveCookie = @ScriptDir & "\LoginFB.ini")
        If Not FileExists($sPathSaveCookie) Then FileOpen($sPathSaveCookie, 2 + 8 + 32)
        Local $sCookie, $FB_dtsg, $UserID
        $g_SectionINI = ___MyB64Encode(_Crypt_HashData($Username & $Password, $CALG_MD5))
        If $iRememberCookie Then
            $sCookie = IniRead($sPathSaveCookie, $g_SectionINI, 'Cookie', '')
            $FB_dtsg = IniRead($sPathSaveCookie, $g_SectionINI, 'DTSG', '')
            If Not $sCookie Or Not $FB_dtsg Or ___TimeStampNow() - IniRead($sPathSaveCookie, $g_SectionINI, 'Timestamp', 0) > 2000000 Then
                Return FB_Login_Ex($Username, $Password, 0, $sPathSaveCookie)
            EndIf
            Local $encrt_UserID = StringRegExp($sCookie, "c_user=(.*?);", 1)[0]
            $UserID = BinaryToString(_Crypt_DecryptData(___MyB64Decode($encrt_UserID), $Password, $CALG_AES_256))
            $sCookie = StringReplace($sCookie, 'c_user=' & $encrt_UserID, 'c_user=' & $UserID, 1, 1)
            Local $aRet = [$sCookie, $UserID, $FB_dtsg]
        Else
            Local $Request = _HttpRequest(1, "https://m.facebook.com/login.php", "email=" & _URIEncode($Username) & "&pass=" & _URIEncode($Password))
            $sCookie = _GetCookie($Request)
            If @error Then Return SetError(1, 0, False)
            Local $UserID = StringRegExp($sCookie, "c_user=(.*?);", 1)
            If @error Then Return SetError(2, 0, False)
            $FB_dtsg = StringRegExp(_HttpRequest(2, 'https://m.facebook.com/home.php', '', $sCookie), '\Q"fb_dtsg" value="\E(.*?)\"', 1)
            If @error Or $FB_dtsg[0] = '' Then Return SetError(3, 0, False)
            Local $aRet[3] = [$sCookie, $UserID[0], $FB_dtsg[0]]
            Local $encrt_UserID = ___MyB64Encode(_Crypt_EncryptData($UserID[0], $Password, $CALG_AES_256))
            $sCookie = StringReplace($sCookie, 'c_user=' & $UserID[0], 'c_user=' & $encrt_UserID, 1, 1)
            IniWrite($sPathSaveCookie, $g_SectionINI, "Cookie", $sCookie)
            IniWrite($sPathSaveCookie, $g_SectionINI, "DTSG", $aRet[2])
            IniWrite($sPathSaveCookie, $g_SectionINI, "Timestamp", ___TimeStampNow())
        EndIf
        Return $aRet
    EndFunc

    Func ___MyB64Encode($binaryData, $iLinebreak = 0)
        Local $aChr = StringSplit('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-', '', 2)
        Local $lenData = StringLen($binaryData) - 2, $iOdd = Mod($lenData, 3), $spDec = '', $base64Data = '', $iCounter = 0
        For $i = 3 To $lenData - $iOdd Step 3
            $spDec = Dec(StringMid($binaryData, $i, 3))
            $base64Data &= $aChr[$spDec / 64] & $aChr[Mod($spDec, 64)]
        Next
        If $iOdd Then
            $spDec = BitShift(Dec(StringMid($binaryData, $i, 3)), -8 / $iOdd)
            $base64Data &= $aChr[$spDec / 64] & ($iOdd = 2 ? $aChr[Mod($spDec, 64)] & '==' : '=')
        EndIf
        If $iLinebreak Then $base64Data = StringRegExpReplace($base64Data, '(.{' & $iLinebreak & '})', '${1}' & @LF) & @LF
        Return $base64Data
    EndFunc

    Func ___MyB64Decode($base64Data)
        $base64Data = StringStripWS($base64Data, 8)
        Local $sChr64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-'
        Local $aData = StringSplit($base64Data, ''), $binaryData = '0x', $iOdd = 0 * StringReplace($base64Data, '=', '') + @extended
        For $i = 1 To $aData[0] - $iOdd * 2 Step 2
            $binaryData &= Hex((StringInStr($sChr64, $aData[$i], 1, 1) - 1) * 64 + StringInStr($sChr64, $aData[$i + 1], 1, 1) - 1, 3)
        Next
        If $iOdd Then $binaryData &= Hex(BitShift((StringInStr($sChr64, $aData[$i], 1, 1) - 1) * 64 + ($iOdd - 1) * (StringInStr($sChr64, $aData[$i + 1], 1, 1) - 1), 8 / $iOdd), $iOdd)
        Return $binaryData
    EndFunc

    Func ___TimeStampNow()
        Local $nYear = @YEAR - (@MON < 3 ? 1 : 0)
        Return (Int(Int($nYear / 100) / 4) - Int($nYear / 100) + @MDAY + Int(365.25 * ($nYear + 4716)) + Int(30.6 * ((@MON < 3 ? @MON + 12 : @MON) + 1)) - 2442110) * 86400 + (@HOUR * 3600 + @MIN * 60 + @SEC)
    EndFunc
     
    kamsamita1 and dudinhthuan like this.
  9. tuoitre

    tuoitre Thành viên năng động
    • 28/34

    Tham gia ngày:
    15/9/15
    Bài viết:
    135
    Đã được thích:
    89
    Tớ chạy FB_Login_Ex.au3 thì thành công rồi, nhưng set error bị sao ấy cậu ạ... tớ gõ sai mật khẩu thì không báo gì cả :| mà hình như cứ chạy tiếp hay là exit ra ấy...cậu check xem có phải thế k ?
     
    kamsamita1 thích bài này.
  10. Tran Duy

    Tran Duy Thành viên mới
    • 3/6

    Tham gia ngày:
    26/4/16
    Bài viết:
    24
    Đã được thích:
    10
    Chào các bác, có cách nào lấy danh sách user đã comment vào bài viết của mình ko ạ?
     
    kamsamita1 thích bài này.
  11. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    @tuoitre À à, đã tìm ra nguyên do là chỗ If $iRememberCookie = 1, nếu có lỗi thì Return FB_Login_EX ở mode $iRememberCookie = 0, bởi vậy không trả @error nếu gặp lỗi. Fix nhẹ chỗ đó là được :p:p:p

    Mã (AutoIt):
    Func FB_Login_Ex($Username, $Password, $iRememberCookie = 1, $sPathSaveCookie = @ScriptDir & "\LoginFB.ini")
        If Not FileExists($sPathSaveCookie) Then FileOpen($sPathSaveCookie, 2 + 8 + 32)
        Local $sCookie, $FB_dtsg, $UserID, $Handle
        $g_SectionINI = ___MyB64Encode(_Crypt_HashData($Username & $Password, $CALG_MD5))
        If $iRememberCookie Then
            $sCookie = IniRead($sPathSaveCookie, $g_SectionINI, 'Cookie', '')
            $FB_dtsg = IniRead($sPathSaveCookie, $g_SectionINI, 'DTSG', '')
            If Not $sCookie Or Not $FB_dtsg Or ___TimeStampNow() - IniRead($sPathSaveCookie, $g_SectionINI, 'Timestamp', 0) > 2000000 Then
                $Handle = FB_Login_Ex($Username, $Password, 0, $sPathSaveCookie)
                Return SetError(@error, 0, $Handle)
            EndIf
            Local $encrt_UserID = StringRegExp($sCookie, "c_user=(.*?);", 1)[0]
            $UserID = BinaryToString(_Crypt_DecryptData(___MyB64Decode($encrt_UserID), $Password, $CALG_AES_256))
            $sCookie = StringReplace($sCookie, 'c_user=' & $encrt_UserID, 'c_user=' & $UserID, 1, 1)
            Local $aRet = [$sCookie, $UserID, $FB_dtsg]
        Else
            Local $Request = _HttpRequest(1, "https://m.facebook.com/login.php", "email=" & _URIEncode($Username) & "&pass=" & _URIEncode($Password))
            $sCookie = _GetCookie($Request)
            If @error Or Not $sCookie Then Return SetError(1, 0, False)
            If StringInStr($sCookie, 'reg_fb', 1, 2) Then
                If StringInStr($sCookie, 'checkpoint=', 1, 1) Then Return SetError(-1, 0, 'Checkpoint')
                If StringInStr($sCookie, 'sfau=', 1, 1) Then Return SetError(-2, 0, 'Password is incorrect')
                Return SetError(-3, 0, 'Email Or Phone is incorrect')
            EndIf
            Local $UserID = StringRegExp($sCookie, "c_user=(.*?);", 1)
            If @error Then Return SetError(2, 0, False)
            $FB_dtsg = StringRegExp(_HttpRequest(2, 'https://m.facebook.com/home.php', '', $sCookie), '\Q"fb_dtsg" value="\E(.*?)\"', 1)
            If @error Or $FB_dtsg[0] = '' Then Return SetError(3, 0, False)
            Local $aRet[3] = [$sCookie, $UserID[0], $FB_dtsg[0]]
            Local $encrt_UserID = ___MyB64Encode(_Crypt_EncryptData($UserID[0], $Password, $CALG_AES_256))
            $sCookie = StringReplace($sCookie, 'c_user=' & $UserID[0], 'c_user=' & $encrt_UserID, 1, 1)
            IniWrite($sPathSaveCookie, $g_SectionINI, "Cookie", $sCookie)
            IniWrite($sPathSaveCookie, $g_SectionINI, "DTSG", $aRet[2])
            IniWrite($sPathSaveCookie, $g_SectionINI, "Timestamp", ___TimeStampNow())
        EndIf
        Return $aRet
    EndFunc
     
    kamsamita1 thích bài này.
  12. tuoitre

    tuoitre Thành viên năng động
    • 28/34

    Tham gia ngày:
    15/9/15
    Bài viết:
    135
    Đã được thích:
    89
    tớ nghiên cứu mãi mà đọc code của cậu tớ chỉ hiểu được 3 phần.. nhưng mà vẫn lỗi cậu à ;)) ... đăng nhập thành công bây giờ cũng trả về @error...
    cậu giúp tớ hiểu về cái @error với .. ví dụ dòng này nhé :
    If @error Or Not $sCookie Then Return SetError(1, 0, False) ; nếu lỗi hoặc không có cookies thì trở về set giá trị.................... tớ chưa dịch được :">
    vầy nếu có lỗi ở đây có nghĩa là lỗi gì và cái dòng gì có lỗi cậu nhỉ ?? hay là autoit cứ chạy đến dòng đó mà báo lỗi thì .... return seterror
     
    kamsamita1 thích bài này.
  13. dudinhthuan

    dudinhthuan Thành viên mới
    • 1/6

    Tham gia ngày:
    20/12/16
    Bài viết:
    9
    Đã được thích:
    7
    ai chỉ mình các upload ảnh lên fb voi.
     
    kamsamita1 thích bài này.
  14. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    @tuoitre Chạy thử:

    $u = 'username'
    $p='pass'
    Local $Handle = FB_Login_Ex($u, $p)
    If Not IsArray($Handle) Or @error Then Exit MsgBox(4096, @error, $Handle)
    ConsoleWrite(@CRLF & '!Login success' & @CRLF)
    Nó báo Lỗi @error số mấy và $Handle nó trả về là gì.
    Mình thử chạy tới chạy lui trên 2 máy đâu có vấn đề gì :v :v
     
    kamsamita1 thích bài này.
  15. tuoitre

    tuoitre Thành viên năng động
    • 28/34

    Tham gia ngày:
    15/9/15
    Bài viết:
    135
    Đã được thích:
    89
    [​IMG]
    Đây bác ợi... @error = 0 và $handle = false
    Em nhập đúng id vs pass nhé :/ phải là 1 với true chứ nhỉ ...
     
    Chỉnh sửa cuối: 27/12/16
    kamsamita1 thích bài này.
  16. tuoitre

    tuoitre Thành viên năng động
    • 28/34

    Tham gia ngày:
    15/9/15
    Bài viết:
    135
    Đã được thích:
    89
    Có khi nào do mạng chậm ko bác ?? em k nghĩ là chậm quá..vì hàm fb_login em login 3p vẫn báo bình thường lưu đc cả mảng 3 cái mà...em đang lưu tạm cái mảng từ hàm fb_login về ko mã hóa :P .. vs lại bác cho em hỏi.. khi mà 1 trong 3 giá trị của cái mảng nó ko đúng mà cứ chạy thì nó báo lỗi j ạ ? để em check rồi cho nó chạy lại từ đầu ợ...
     
    kamsamita1 thích bài này.
  17. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    @tuoitre mình nhờ 2 người win 8.1 và win 10 test giúp, mình thì 2 máy win 7 và XP, tất cả đều chạy ổn, trường hợp của bạn mình chịu thua rồi :v :v
    Cái giá trị trả về gồm [0] Cookie, [1] UserID, [2] DTSG mình thấy cái nào cũng quan trọng vì request nào cũng cần tụi nó :v Nếu mấy giá trị đó sai thì cũng không có xuất hiện lỗi gì, vẫn trả về dữ liệu trang html bình thường thôi, cơ mà trang trả về nó không có các giá trị mình cần, ví dụ đơn giản, sai cookie hoặc Dtsg thì nó trả về dữ liệu html trang đăng nhập ...
     
    kamsamita1 and tuoitre like this.
  18. tuoitre

    tuoitre Thành viên năng động
    • 28/34

    Tham gia ngày:
    15/9/15
    Bài viết:
    135
    Đã được thích:
    89
    do mạng bác ạ... hnay em về nhà chạy y nguyên thế thì consle nó ghi là success ... vãi chưởng... =.=''
     
    kamsamita1 thích bài này.
  19. Đỗ Thành Nam

    Đỗ Thành Nam Thành viên mới
    • 1/6

    Tham gia ngày:
    16/1/17
    Bài viết:
    18
    Đã được thích:
    12
    Bác ơi giúp em làm cái lấy hết comment ở 1 status trên facbook với
     
    kamsamita1 thích bài này.
  20. VŨ Khoa

    VŨ Khoa Thành viên mới
    • 3/6

    Tham gia ngày:
    21/11/16
    Bài viết:
    2
    Đã được thích:
    2
    có hàm FB_Logout() không các AE
     
    kamsamita1 thích bài này.

Chia sẻ trang này

Đang tải...