• 10-09-2014, 20:49:56
    #19
    Kimlik doğrulama veya yönetimden onay bekliyor.
    pcmania adlı üyeden alıntı: mesajı görüntüle
    Süpersiniz hocam. Ellerinize sağlık. Tam da istediğim gibi çalıştı. Fakat Tweet attırma aşamasına gelince bir sorun daha çıktı ortaya. Mesele textbox üzerinden yazılan Tweet'i, cevap olarak Twitter'daki kutucuğa gönderdiğim zaman, cevap kutucuğunun başında bulunan @twitterKullanıcıAdı kısmı siliniyor.

    Yani;
    @twitterKullanıcıAdı selam.

    gibi cevap atmak isterken, program; @twitterKullanıcıAdı kısmını siliyor. Sadece textBox'tan aldığı "selam" kısmını tweetliyor. Bunun sebebi nedir? Yada çözümüne dair herhangi bir bilginiz var mı?

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 18:59:10 -->-> Daha önceki mesaj 18:55:50 --



    İlginiz için teşekkür ederim hocam. betmon nickli arkadaşın verdiği kod ile sorun çözüldü.



    Daha önceden bir API olarak TweetSharp'ı da denemeye çalıştım fakat; TweetSharp ile yapınca gidip bide Twitter'dan uygulama oluşturmamız gerekiyor sanırım. Onu yaptım ama TweetSharp'ı sanırım sadece programı yapan kişi kullanabiliyor. Başkalarına yollayınca programı, uygulama Twitter hesaplarıda izin olmadığı için benden başkası kullanamıyor. Bu sebeple API ile değil, HtmlElement yöntemi ile yapmaya çalışıyorum.
    İki buton ile yaptım, otomatik yapmak istersen "WebBrowserReadyState.Complete" ile sayfanın yüklenmesini bekleyip sonran sonra işlem yaptırabilirsin.

    Thread.Sleep() ile de yüklenene kadar 1 2 saniye bekletebilirsin ama farklı Thread de yaptırırsan takılma olmaz. Hepsini single thread ile yaptırırsan hiçbir işe yaramaz

            private void Form1_Load(object sender, EventArgs e)
            {
                //Olayın püf noktası aşağıdaki formu açtırmaktır.
                webBrowser1.Navigate("https://mobile.twitter.com");
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                foreach (HtmlElement Html in webBrowser1.Document.Body.All)
                {
                    //title niteliği "Yanıtla" olanı bul
                    if (Html.GetAttribute("title") == "Yanıtla")
                    {
                        //Tıkla
                        Html.InvokeMember("click");
                        break; // Twit attıktan sonra foreach ı sonlandır boşa dönme
                    }
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                foreach (HtmlElement Html in webBrowser1.Document.Body.All)
                {
                    if (Html.GetAttribute("name") == "tweet[text]")
                    {
                        //İnner text ile value nin içindeki değeri alıyoruz.
                        var cevaplanacakKisi = Html.InnerText;
                        Html.SetAttribute("value", cevaplanacakKisi + "buraya yaz gitsin");
                        break; // Twit attıktan sonra foreach ı sonlandır boşa dönme
                    }
                }
            }
  • 11-09-2014, 01:11:14
    #20
    betmo adlı üyeden alıntı: mesajı görüntüle
    İki buton ile yaptım, otomatik yapmak istersen "WebBrowserReadyState.Complete" ile sayfanın yüklenmesini bekleyip sonran sonra işlem yaptırabilirsin.

    Thread.Sleep() ile de yüklenene kadar 1 2 saniye bekletebilirsin ama farklı Thread de yaptırırsan takılma olmaz. Hepsini single thread ile yaptırırsan hiçbir işe yaramaz

            private void Form1_Load(object sender, EventArgs e)
            {
                //Olayın püf noktası aşağıdaki formu açtırmaktır.
                webBrowser1.Navigate("https://mobile.twitter.com");
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                foreach (HtmlElement Html in webBrowser1.Document.Body.All)
                {
                    //title niteliği "Yanıtla" olanı bul
                    if (Html.GetAttribute("title") == "Yanıtla")
                    {
                        //Tıkla
                        Html.InvokeMember("click");
                        break; // Twit attıktan sonra foreach ı sonlandır boşa dönme
                    }
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                foreach (HtmlElement Html in webBrowser1.Document.Body.All)
                {
                    if (Html.GetAttribute("name") == "tweet[text]")
                    {
                        //İnner text ile value nin içindeki değeri alıyoruz.
                        var cevaplanacakKisi = Html.InnerText;
                        Html.SetAttribute("value", cevaplanacakKisi + "buraya yaz gitsin");
                        break; // Twit attıktan sonra foreach ı sonlandır boşa dönme
                    }
                }
            }

    Hocam süpersiniz ya Ben o tweet cevaplama işini kendim bildiğim, farklı bir yöntem ile hallettim ve yine sizin yaptığınız gibi cevapla ve tweet olarak atma işlemlerini 2 farklı butonla yapabildim. Tek bir buton ile nasıl yapılacağını çözemedim. Daha sonra buraya açtığım konu geldi aklıma. Onu da açıklamışsınız, sağolasınız. Şuanda o kısmı halletmeye çalışacağım. Çünkü 2 buton yerine tek buton ile işleri halletmek daha hoş olacaktır.
  • 11-09-2014, 15:36:42
    #21
    document complete eventini kullanabilirsin. Sayfa yüklendikten sonra cevap yazar ve twit atar.
  • 12-09-2014, 19:51:16
    #22
    betmo adlı üyeden alıntı: mesajı görüntüle
    document complete eventini kullanabilirsin. Sayfa yüklendikten sonra cevap yazar ve twit atar.
    Eyvallah hocam ilginiz için teşekkür ederim ama ben o işi ProsesBar kullanarak hallettim. Şuanda tek sorunum, yazdığım program hep aynı kişiye Tweet atıyor. Her çalıştırdığımda aynı kişiye yolluyor Tweeti. Ben ise, program her çalıştığında farklı bir kullanıcın Tweetine cevap atsın istiyorum. HtmlElement'in o tarz bir özelliği yok mudur acaba? Veya bilinen farklı bir yöntem.
  • 12-09-2014, 20:01:12
    #23
    yukarıda ilk yanıtlaya basar demiş. Sayfada kaç adet yanıtla butonu olduğunu saydırırsın. Daha sonra random bi sayı atarsın random olarak bi tanesini belirleyip ona yazabilirsin cevabını.
  • 12-09-2014, 20:02:03
    #24
    Sen komple kodları yaz da ona göre adapte edip paylaşıyım.

    Edit-----------------------------------------------------------------------------
    Türkçe meali;
    Rastgele bir sayı oluştur,
    0 ile 15 arasında oluşturulan sayı 7 ise ve title html niteliği "Yanıtla" ise o butona tıkla değilse geç

    Burdaki amaç hem random sayının 7 olması hemde niteliğin yanıtla olmasıdır. Random sayı 7 olana kadar denk gelen yanıtla niteliklerini pas geçiyor.
                var rdn = new Random();
    
                foreach (HtmlElement Html in webBrowser1.Document.Body.All)
                {
                    
                    //title niteliği "Yanıtla" olanı bul
                    if (rdn.Next(0,15) == 7 && Html.GetAttribute("title") == "Yanıtla")
                    {
                        //Tıkla
                        Html.InvokeMember("click"); 
                        break; // Twit attıktan sonra foreach ı sonlandır boşa dönme
                    }
                }
    bu arada progress bar ile nasıl çözdün paylaşırsan sevinirim.
  • 14-09-2014, 17:56:57
    #25
    betmo adlı üyeden alıntı: mesajı görüntüle
    Sen komple kodları yaz da ona göre adapte edip paylaşıyım.

    Edit-----------------------------------------------------------------------------
    Türkçe meali;
    Rastgele bir sayı oluştur,
    0 ile 15 arasında oluşturulan sayı 7 ise ve title html niteliği "Yanıtla" ise o butona tıkla değilse geç

    Burdaki amaç hem random sayının 7 olması hemde niteliğin yanıtla olmasıdır. Random sayı 7 olana kadar denk gelen yanıtla niteliklerini pas geçiyor.
                var rdn = new Random();
    
                foreach (HtmlElement Html in webBrowser1.Document.Body.All)
                {
                    
                    //title niteliği "Yanıtla" olanı bul
                    if (rdn.Next(0,15) == 7 && Html.GetAttribute("title") == "Yanıtla")
                    {
                        //Tıkla
                        Html.InvokeMember("click"); 
                        break; // Twit attıktan sonra foreach ı sonlandır boşa dönme
                    }
                }
    bu arada progress bar ile nasıl çözdün paylaşırsan sevinirim.
    Yeni bir form oluşuturup içine progessbar ve bir de timer attım. Beklemesini istediğim yere frm2.ShowDialog(); yazdım.

    Fom2'nin içindeki timer içine ise şu kodları yazdım :

    progressBar1.Increment(1); //dolma süresinin değerini gösteriyor.

    if (progressBar1.Value == 100)
    {
    timer1.Stop();
    this.Close();
    }

    progessbar'daki çubuğu Timer yardımıyla dolduruyorum. Çubuk dolana kadar da program bekliyor.
  • 19-09-2014, 00:17:52
    #26
    twitter kullanmıyorum fakat twit atma formu frame içersinde olabilir. oyuzden erişemiyodur. yada butonun üzerine focuslanman gerekebilir