Delphi Can

Orjinalini görmek için tıklayınız: [ÇÖZÜLDÜ] Google Calendar API Server tipi Erişim Metodu hakkında tecrübesi olan
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2 3 4 5
Merhaba.

Arrow  SON SÖZÜ BAŞTAN SÖYLEYELİM :
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol. Güncelleme yaparsam oradan son halini indirirsiniz. 
Şimdi burada paylaşılan kod sürekli eskiyecek.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol


- Biliyorsunuz herkesin telefonu akıllandı. Google API'leri sayesinde de kolaylık anlamında altın çağımızı yaşıyoruz.

- Çok seyahat eden birisi olarak THY'den uçak bileti alıyorum, hemen takvimime bu bilgi işleniyor. Herhangi bir izin vs. vermediğim halde.

- Geçenlerde SMS otomasyonuna bir eklenti hazırlarken aklıma düştü. Idea  Personelin eposta listesi elimde var, SMS'lerine görev düştüğünde POSTa hesapları üzerinden ( Google ) Takvimlerine de bu işlerin otomatik olarak işlenmesini sağlayabilir miyim diye düşündüm. 

- Böylece bir taşla iki kuş hesabı kolları sıvadım. Şu an bir Helper Class hazırladım ve sorunsuz çalışıyor. Şu sorunsalı (pek de sorun sayılmaz ama) çözer çözmez buradan da paylaşırım.

- Konu şöyle, API diyor ki 
(1) "https://accounts.google.com/o/oauth2/auth" linkine git, 
(2) Takvim Hesabını seç
(3) Uygulama Erişimi için "İzin Ver"
(4) Sonra sana bir AuthCode verceğim. Bu kodu al
(5) "https://accounts.google.com/o/oauth2/token" linkine giderken parametre olarak kullan 
(6) Sonra sana bir Access_Token vereceğim. Bu kodu sakla. Bir daha AUTH olana kadar bunu şu kadar zaman içinde kullanabilirsin.

Neler yapabiliriz, Takvime yeni EVENT ekle, mevcut EVENT'i sil, değiştir, rengini değiştir, Eposta bildiğin kişilerle eklediğin toplantı/görev ne varsa paylaş bunun koyu ve altını çizerek yazdım; eşimin, oğlumun, benim epostasına bağlı takvime ve dolayısıyla senkron telefonların takvimine hiç bir ses uyarı vermeden otomatik olarak işlendi. 

- Şimdi bu kadar yazdım, asıl sorunsala geleyim : API referansında SERVER'dan SERVER'a erişim imkanı var diyor. Böylece araya Kullanıcıdan şu (3) nolu sıradaki "Uygulama için izin ver" can sıkıcı kısmını geçebildiğimiz ifade ediliyor. Sonra da gördüm ki bunu kapatmışlar G+ için paralı mı yapmışlar nedir sonuç hüsran.

- Bu konuda bilgisi görgüsü olan varsa paylaşırsa sevinirim. Smile  

- Yazılımı kendim kullanıyor olsam, her projeyi açtığımda ( günde bir kere ) WebBrowser ile açtığım ekrana "İZİN VER" butonuna bir kere tıklayıversem bir tarafım eksilmez. 

razqnftadbh4aaavuvwa.png

s7aaxupvfqxecral71q3.png
Çok Mantıklı , Beleşe Mail Smile
Bir ekleme yapayım. Maksat/sorun WebBrowser içerisindeki butona basamamak kesinlikle değil

Asıl maksat WebBrowser'i tümüyle devre dışı bırakıp sadece Indy seti ile arka fonda işlemi tamamlamak. Idea

Hatta bir kod örneği vereyim WebBrowser'da ID'si bilinen Butona basan kod örneği (meraklısına diyerek)
function ButonaBas( WebBrowser:TWebBrowser; strButtonId: String ):boolean;
Var
 i : Integer;
begin
 Result := False;
 if NOT Assigned(WebBrowser.document) then Exit;

 if WebBrowser.OleObject.Document.all.tags('button').length > 0 then
 begin
   for i := 0 to WebBrowser.OleObject.Document.all.tags('button').length-1 do
   begin
     if WebBrowser.OleObject.Document.all.tags('button').item(i).id = strButtonId then
     begin
       WebBrowser.OleObject.Document.all.tags('button').item(i).click;
       Result := True;
     end;
   end;
 end;
end;

Bu Google Takvim Ekranı İzin Butonunun ID'si ( submit_approve_access olarak geçiyor )için Kullanımı
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
  if ButonaBas( WebBrowser1, 'submit_approve_access' )
    then ShowMessage( 'Buttona bastık' )
    else ShowMessage( 'Button nerede göremiyorum....!!! ');
end;


Sorunu TWebBrowser'in etrafından dolanarak çözdüm arkadaşlar. 

- Biliyorsunuz WebBrowser'ın Visible özelliğini veya üzerinde olduğu panel vb. visible özelliği kapalı olduğunda sayfayı RENDER etmiyor oluşundan sürekli görünür halde bırakıp ekranın sınırlarının dışında bir yerlere taşıyarak gizlemek veya önüne başka panel koyarak gizlemek yoluna gidiyorduk.

- Sorunum, bir yandan bu bahsettiğim VISIBLE olayı ve diğer yandan da Delphi STARTER edition'larda WebBrowser olmayışı, dolayısıyla hazırladığım HELPER CLASS sınırlı kalır endişesiydi.

(1) Şöyle ki, CreateOleObject('InternetExplorer.Application') ile bir Explorer penceresini kendim create edip Visible özelliğini FALSE ederek arka fonda işlem yapması sağlamak geldi aklıma ve kolları sıvadım. 

(2) Yukarıdaki verdiğim örneğin benzeri bir teknikle İZİN butonuna basıldı ve kod alındı. 

(3) Gerisi Indy bileşen setinin erişebildiği şekilde yürüdü. 

(*) Tek bir şey zorladı, Bendeki IdHttp setinde GET, POST, PUT var ama DELETE metodu olmadığından bir de bunun eklenmesi gerekti. (EVENT silmek için protokol böyle) Sonuç başarılı.

Şimdilik projeye ayırdığım süre bu kadar. Şimdilik esen kalın.  Smile
Örnek projeyi yada kodları paylaşabilirmisiniz?
İlk mesajımda da belirttiğim üzere paylaşırım.  Smile
Daha önce ilgilenmişsen bildir, buradan blok kodlarla eksik kısımlarında yardımcı olayım. 

Tecrübe ettin mi bilmiyorum ama Class Unit oluşturmak kurgusu basit ama mantığı normale göre biraz zordur. 

Bu projeden bahisle örnek vereyim 
(1) OpenSSL DLL'lerini RESOURCE'a koysam mı yoksa kullanıcıya mı bıraksam şeklinde karar vermem lazım. Çünkü lisans sorunu doğurur. Ayrıca XE ile derlersen başka OpenSSL DLL'leri, Delphi 2007 ile derlersen başkası. 

(2) Bu SSL kütüphanelerinin Windows TEMP klasörüne kopyalanması ve oradan çalıştırılması için DLL Path yönlendirilmesi lazımdı.

(3) Indy bileşen setinin her Delphi sürümündeki Indy paketinde çalışacak şekilde uyumlu hale getirilmesi gerekiyor.

(4) "izin ver" butonu en son aşama idi. Bir de kullanıcının bilgisayarında hesap kurulu değilse, hesap için "eposta/password" LOGIN işlemleri yaptıktan sonra "OAuth" aşamasına geçmesi gerekiyor. Dolayısıyla Class'ın ihtimaller çerçevesinde davranacak şekilde biraz daha akıllı olması lazım.

(5) API'nin parametrelerinden sadece ihtiyacım olanı mı yoksa bütününü mü ihtiva etmeli kararı vermek lazım.

(6) Bu konuda internette araştırdım. TMS VCL Cloud Pack (ücretli) , Google Calendar API for Delphi (bağlı çalışan internet suite için ücret istiyor),  Astonsoft Google Calendar Delphi Component (ücreliIdea

Bu çerçevede kimsenin ayağına basmadan bir çözüm bulmak lazım. Yani iki farklı CLASS oluşturacağım gibi görünüyor. İlki kendi kullanacağım versiyon ki şu an onu kurguluyorum, ikincisi burada paylaşmak için DLL ve lisans sorunundan arındırılmış versiyon. Exclamation
Merhabalar bunu component kullanmadan mı yapmaya gerek duydunuz yani size özel olarak bir şey olsun diye mi çünkü bununla ilgili 2-3 tane firma var ve verdikleri google api componentler gayet başarıldır
Firma derken detay verir misiniz ? 
Buraya örnek hazırlamaya uğraşıyordum, gerek kalmadığına sevindim. Smile
Merhabalar

1. TMS VCL/FMX Cloud Pack

2. CData FireDAC Components for Google Calendars

3. Astonsoft Google Calendar Delphi Component

4. n.Software Google Integrator
Merhabalar zaten bunları Google taraması ile bulabiliyoruz. Ücretsiz çözüm sunacaksınız sanmıştım.

1. TMS VCL/FMX Cloud Pack - Ücretli
2. CData FireDAC Components for Google Calendars Delphi Lisansı ile Ücretli (Starter sürümünde yok)
3. Astonsoft Google Calendar Delphi Component (C*r*k ürünler karşılaştım ücretli demek ki)
4. n.Software Google Integrator ( über ücretli gerisini siz anlayın )
Sayfalar: 1 2 3 4 5