Отправка сообщений в ФБ

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by xophet, 12 May 2013.

  1. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Всем привет.
    Что-то меня заклинило, может кто подскажет?
    Проблема в следующем: В фб поменяли отправку сообщений. Старая, в общем-то работает, но не прикрепляются картинки, поэтому нужно переделать на новую.
    И хоть ты плач, но не работает, да, и к тому же, не понятно откуда некоторые параметры брать.
    ХЗ сколько уже бьюсь. ИССЯК!
    Code:
    function PostMessageToUser(HTTP:TidHTTP;Victim:string;message:string):Boolean;
    var Data,UrlData:TStringList;
        Multi:TIdMultiPartFormDataStream;
        res,res2,res_composer,fb_dtsg,id,metadata,url,appid,user__,tmp:string;
        s:TStringStream;
        i:integer;
        han:Boolean;
        reg:TRegExpr;
        Name,LastName:string;
        Files:TStringList;
        t_now:TDateTime;
        h,m,ss,ms:word;
    begin
      Result:=False;
      Data:=TStringList.Create;
      UrlData:=TStringList.Create;
      Multi:=TIdMultiPartFormDataStream.Create;
      s:=TStringStream.Create('');
      han:=HTTP.HandleRedirects;
      reg:=TRegExpr.Create;
      regvkcom:=TRegExpr.Create;
      Files:=TStringList.Create;
      try
        user__:=Pars('c_user=',(HTTP.CookieManager.CookieCollection.Cookie['c_user','facebook.com'].ClientCookie),'');
        HTTP.HandleRedirects:=True;
        reg.Expression:='\d+';
        if reg.Exec(Victim) then
          if reg.Match[0]<>Victim then
          begin
            try
              HTTP.Get('http://www.facebook.com/'+Victim,s);
            except
            end;
            res:=s.DataString;
            Victim:=Pars('profile_owner&quot;:&quot;',res,'&quot;');
          end
          else
          begin
            try
              HTTP.Get('http://www.facebook.com/profile.php?id='+Victim,s);
            except
            end;
            res:=s.DataString;
          end;
        fb_dtsg:=Pars('"fb_dtsg":"',res,'"');
        Name:=UTF8Decode(Pars('<title id="pageTitle">',res,'</title>'));
        LastName:=Trim(Copy(Name,Pos(' ',Name)+1,Length(Name)));
        Name:=Trim(Copy(Name,1,Pos(' ',Name)-1));
        if (Pos(NAMETAG,LowerCase(Message))>0)or(Pos(LASTNAMETAG,LowerCase(Message))>0) then
          Message:=StrReplace(StrReplace(Message,NAMETAG,Name),LASTNAMETAG,LastName);
        try
          res:=HTTP.Get('https://www.facebook.com/messages/'+Victim);
        except
        end;
        t_now:=now;
        DecodeTime(t_now,h,m,ss,ms);
        Data.Clear;
        Data.Add('message_batch[0][action_type]=ma-type:user-generated-message');
        Data.Add('message_batch[0][thread_id]='+Pars('"thread_id":"',res,'"'));
        Data.Add('message_batch[0][author]=fbid:'+user__);
        Data.Add('message_batch[0][author_email]=');
        Data.Add('message_batch[0][coordinates]=');
        Data.Add('message_batch[0][timestamp]='+IntToStr(DateTimeToUnixTime(t_now,0)));
        Data.Add('message_batch[0][timestamp_absolute]=Сегодня');
        Data.Add('message_batch[0][timestamp_relative]='+IntToStr(h)+':'+IntToStr(m));
        Data.Add('message_batch[0][timestamp_time_passed]=0');
        Data.Add('message_batch[0][is_unread]=false');
        Data.Add('message_batch[0][is_cleared]=false');
        Data.Add('message_batch[0][is_forward]=false');
        Data.Add('message_batch[0][is_filtered_content]=false');
        Data.Add('message_batch[0][spoof_warning]=false');
        Data.Add('message_batch[0][source]=source:titan:web');
        Data.Add('message_batch[0][body]=ыва');
        Data.Add('message_batch[0][has_attachment]=false');
        Data.Add('message_batch[0][html_body]=false');
        Data.Add('message_batch[0][specific_to_list][0]=fbid:'+Victim);
        Data.Add('message_batch[0][specific_to_list][1]=fbid:'+user__);
        Data.Add('message_batch[0][forward_count]=0');
        Data.Add('message_batch[0][force_sms]=true');
        Data.Add('message_batch[0][ui_push_phase]=V3');
        Data.Add('message_batch[0][status]=0');
    //не понятно откуда message_id берется...
        Data.Add('message_batch[0][message_id]=');
        Data.Add('client=mercury');
        Data.Add('__user='+user__);
        Data.Add('__a=1');
    //а это откуда берется? вроде для аккаунта не меняется, поэтому на рез-т испытаний не влияет
        Data.Add('__dyn=7n8ahxoNoYwd8');
        Data.Add('__req=8');
        Data.Add('fb_dtsg='+fb_dtsg);
        Data.Add('phstamp=');
        try
             res:=HTTP.Post('https://www.facebook.com/ajax/messaging/send.php',Data);
        except
        end;
        if Pos('error',LowerCase(res))=0 then
          Result:=True;
      finally
        reg.Free;
        HTTP.HandleRedirects:=han;
        HTTP.Request.ContentType:='application/x-www-form-urlencoded';
        s.Free;
        Multi.Free;
        UrlData.Free;
        Data.Free;
        Files.Free;
      end;
    end;
     
  2. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,309
    Reputations:
    327
    а откуда взялось то что есть, не с потолка же. бери сниффер и отслеживай траф