Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[ÇÖZÜLDÜ] Google Calendar API Server tipi Erişim Metodu hakkında tecrübesi olan
#31
Muharrem Bey açıklamalarınız için teşekkür ederim. Projeyi özellikle bana class yapısını anlamama yardımcı olacağı ve google api kullanımı konusunda yol göstereceğinden ilgiyle takip ediyorum.

apikey ve fcalendarid değerlerini EncodeURI fonksiyonunuz ile bir kontrole tabi tutuyorsunuz.. Neden gerek duyduğunuzu merak ettim, FCalendarID := 'primary'; satırı ile zaten bu değişkenin değerini siz tanımlıyorsunuz.
Ben olsam en fazla trim(FApi_Key) yapardım Smile
Ne olabileceğini öngördünüz? Yine aynı fonksiyonda
else if ASrcUTF8[I] = ' ' then
begin
Result[J] := '+';
Inc(J);
end
kodu ile boşluk karakterini '+' olarak değiştiriyorsunuz, bunu neden yaptığınızı da anlamadım.

Son olarak, dll dosyalarını neden uygulamanın çalıştığı klasöre değil de temp klasörüne çıkarıyorsunuz bunu da merak ettim.

Vaktinizi aldığım için kusura bakmayın. Ben şimdi delphi kitabimdan delphide class uygulamaları konusunu bir okuyayım Smile
Fesih Beyin kitabını da merakla bekliyorum, umarım yakında baskı işlerini halleder ve okuma imkanı bulabiliriz.
Cevapla
#32
Merhaba.

İlgi ve alakan için teşekkür ederim.

Gözden kaçmış olabileceğini değerlendirdiğim için yazıyorum, dikkat ederseniz aşağıdaki şekilde, bu ilgili property atamasını yapmazsanız dahi Primary olarak kendiliğinden atanacaktır. Idea

constructor TGoogleCal_Helper.Create;
begin
 Inherited;  // Create'de  daima başta call edicez...
 //...
 FCalendarID := 'primary'; // Varsayılan Takvim
end;

Primary kalmasının engeli yoktu ancak API'yi kullanacak kişinin aynı Google hizmetine birden fazla TAKVİM'i varsa (Kurumsal, özel, arkadaş çevresi, okul çevresi vb. takvimleri) bir yerde bunu seçebilmesine olanak sağlamam gerektiğini düşündüm. Gerek yoktu da diyebilirsiniz.  Wink   


- Bir diğer sorunuz da Boşluk karakterlerinin + ile değiştirilmesi konusu bu %20 de olabilirdi. URL paramteresi kullanma ihtimaline önceden hazırlık diyelim. Öngörü üzerine bir mesajım olmuştu. Öngörü zenginliği projenin hata verme ihtimalini en aza indirger. 

- Şöyle ki basit bir google taraması yaparken, iki ve daha fazla kelimelik arama yaparsanız, sorgu yapınca URL satırında bunları + ile birleştidiğini göreceksiniz. 

- Diğer sorunuz: DLL dosyalarını uygulamanın olduğu klasörün yetki sınırlı bir yerde çalışması ihtimaline karşı sınırsız sorumsuz TEMP klasörünü tercih ettim. TRT'de çalışıyorum. Orada her bilgisayar ISA server tarafından denetim altında. Orada da kullanıyorum. Şimdi bazı klasörlerde sadece okuma yetkisi verildiği oluyor. Bu durumda en basit çözüm TEMP klasörüdür.

- Çok memnun oldum, çalışmalarınızda başarılar dilerim.


Bu arada SSL DLL'lerini Resource içine alacaksanız, TResourceStream.Create satırından çıkarımda bulunabilirsiniz ama yine de ekleyeyim.
iki set dll koyup RES.RES haline getirin.
Kod:
 // SSL DLL'lerinin Resource üzerinden kullanılması için Project/Options altında
 // "Directories/Conditional" başlığındaki "Conditional Defines" kısmına
 SSL_DLLs_inResourceMode
 // direktif kelimesini eklemelisiniz.
 // Bu GLOBAL olarak tüm projede bilinecek, Class içinde de değerlendirilecektir.


Kod:
ssl_01 RCDATA "ssleay32.dll"
ssl_02 RCDATA "libeay32.dll"
ssl_03 RCDATA "ssleay32.dll.tokyo"
ssl_04 RCDATA "libeay32.dll.tokyo"
Saygılarımla
Muharrem ARMAN

WE75nm.gif


Cevapla
#33
İyi ki dll klasörünü sormuşum, gerçekten önemli bir bilgi verdiniz. Ben bu tarz bir durumla karşılaşmadığımdan sebebini anlayamamıştım.

Encodeuri fonksiyonunuzu çok beğendim, örnek kodlarımın arasına ekledim...Api keyi bu  fonksiyon ile teste tabi tutma konusu öngörü ile alakalı bir durum gerçekten. Ben en fazla boşluklarla beraber alınmıştır diyerek trim kullanır geçerdim. Uygulamalarımı benden başkaları da kullandıkça sanırım öngörülerinizi daha iyi anlayacağım..

Uygulamanızın kendisinden bağımsız olarak bir sorum daha olacak...
Ssl dll dosyalarının lisans konusunda Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol sitesinde;
"OpenSSL is licensed under an Apache-style license, which basically means that you are free to get and use it for commercial and non-commercial purposes subject to some simple license conditions. " yazıyor.
Google translate ile çevirdiğimde;
"OpenSSL, basit bir lisans koşullarına bağlı olarak ticari ve ticari olmayan amaçlar için kullanmak ve kullanmakta özgür olduğunuz anlamına gelen Apache tarzı bir lisans kapsamında lisanslanmıştır." diyor. Ticari uygulamalarda bile serbest bırakılıyor ise lisans ile ilgili nasıl bir sıkıntı çıkabilir? Ben bu dll dosyalarını uygulama klasörümün içinde veriyorum. Bu konuda bir olumsuzluk yaşama ihtimalim var mı?
Cevapla
#34
Güzel soru...  
Bu cevabı bu ve benzeri diğer açık kaynak projeler için de yazıyorum.

Bu GNU Public Lisansına ilişkin yazıyı ve benzerlerini defalarca okumuşluğum var. 
Sadece içinde "freely distribute" ifadesi olmaması beni ürkütüyor
Kodları tanıdık tanımadık herkesin faydasına açma konusunda tereddüdüm yok. 

Aynı yazıda dikkat ederseniz, burada konusu olmayan (c*r*k, hck vb. olduğu aşikar) farklı sebeplerle kullanılabileceğine işaret edilerek hukuki haklar vs. ile sorumluluk devrini de işlemiş.

Şimdi siz bu Class'ı ücretsiz kullanma özgürlüğüne sahipsiniz. İyi niyetli olarak DLL'yi de paketinize koyarsınız sorun olmayacak gibi görünüyor. 
Başka birisi aynı Class'ı başka amaçlı kullanır ama sadece bu sınıfı dağıtan kişi Muharrem ARMAN'ın bir kaynak projesindeki DLL'yi o da kullanırsa ters köşe olma riskim de var. Bunu öngöremiyorum.

Hatta dikkat etmişsiniz, bu DLL'leri RESOURCE olarak içine koyma opsiyonu da anahtar teslimi yer alıyor. Direktifi değiştirdiğiniz an RESOURCE içine kendiliğinden eklenecek şekilde tasarladım.

Ama gel gör ki her gün bir şeyler öğrenen birisi olarak öngöremediğim şeylerin hesabını yapmak durumundayım. Buna siz deyin ki çok evhamlısın, ben deyim ki güvence nasıl tanımlarsak tanımlayalım, kişilerin özgür iradesine bırakmayı yeğledim.

Durum bundan ibarettir.  Smile
Saygılarımla
Muharrem ARMAN

WE75nm.gif


Cevapla
#35
Anladığım;
siz açık kaynak şeklinde bir class hazırladığınızdan ve bu yapıyı kullanacak uygulamaların sorumluluğunu (haklı olarak) almak istemediğinizden dll dosyalarını dahil etmediniz.
Buradan;
"Kendi yazdığımız uygulamaların içinde veya yanında bu dosyaları paylaşmamız halinde lisans anlamında bir sıkıntı yaşanmaması gerekir" şeklinde yorumladım.
Değerli açıklamalarınız için çok teşekkür ederim.
Cevapla
#36
Bu kadar kısa ve öz anlatma kabiliyetim olsaydı beni kimse tutamazdı. Smile
Saygılarımla
Muharrem ARMAN

WE75nm.gif


Cevapla
#37
Merhaba.

Bu başlığa soru gelmediği sürece yazmaya gerek kalmadı ancak son bir defalık gelişmeleri paylaşmak istedim. 
Şu anki haliyle standart takvim işlemleri için yeterli kabiliyete ulaştığını değerlendiriyorum. Idea 

Kendi otomasyonum için uygulamada çıkan aksaklık ve yeni gerekliliklere göre GoogleCalendar_Helper sürekli evrim geçiriyor.  Smile

Bu güne kadar eskiden yeniye yapılan güncellemeler :
  • TimeZone hatası giderildi. 
  • Bir olay kaydı üzerinde bilgi güncelleme özelliği eklendi
  • Girildiği halde kayıtlardan geri gelemeyen Creator bilgisi ( gmail hesabına kilitli olduğundan) ve Katılımcılar ID, Organizasyon  bilgileri kaldırıldı.
  • Dateseparator / Timeseparator XE Desteği verildi.
  • Google Calendar Client JSON dosyasından AUTH bilgileri otomatik parse özelliği eklendi. İndirilmiş dosyadan login için gerekli kısımları okur.
    SSL DLL desteği IFDEF compiler direktifine dönüştürüldü. Böylece iki farklı versiyon yapmaya da çözüm geldi.
  • Bazı JSON virgül (,) problemleri düzeltildi
  • Kullanıcı takvim için kendi manuel "Evenet Id"'sini verebilmesi dolayısıyla yerel bir veritabanı kayıtlarından faydalanıp direkt sorgu yapmak imkanı getirildi.
  • Takvim olay listesi alırken tarihe göre sırlama özelliği eklendi
  • İki tarih arası olayların listesinin alınabilme özelliği eklendi.
  • Hem silinmiş (cancelled) hem aktif her iki olay listesinin alınabilmesi özelliği eklendi
  • Zaman aşımı nedeniyle süresi dolan OAuth 2.0 kodu için bir adet yeni Event eklendi. herhangi bir zamanda serverden "401 Login Required" hatası dönerse, sizin projenizdeki bir procedure otomatik tetikleyecek şekilde yapılandırıldı.
       OnGoogleCalAuthTimeOut
  • Mevcut bir takvim olayına sonradan Kişi Ekleme veya Kişi Çıkarma özelliği eklendi. 
       CalEventKisiGuncelle( aEventID, aEmail, aName, aComment: String; boolEkle:boolean ): String;
  • ID'sinden alınan "Takvim Olayı"nın JSON Parse fonksiyonu geliştirildi.
  • Yeni Event : OnGoogleCalAuthStatChange eklendi. Bağlantının sağlandığı veya koptuğu bu EVENT ile projenizde bağlayacağınız bir procedure tetiklenecektir. 
  • Tek adımlı Login işlemi desteği eklendi. ( xGoogleCal.GoogleOAUTH ) 
  • Thread desteği eklendi. Authentication işlemi sırasında projenizin bekleme yapmasına gerek kalmadı. 
  • Ayrıca işlem başladığında AUTH olana kadar arka fonda döngü sürecektir. 
  • Sonuç OnGoogleCalAuthStatChange eventinden takip edilebilmektedir.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol. Güncel son hali daima orada. 
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Saygılarımla
Muharrem ARMAN

WE75nm.gif


Cevapla
#38
Ben github linkini takip ediyorum.
Cevapla
#39
Bilgilendirme için teşekkürler.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  IBDatabase Hakkında adelphiforumz 11 318 Dün, Saat: 00:42
Son Yorum: mcuyan
  Firedac bileşenleri hakkında canbir 1 115 16-04-2018, Saat: 14:10
Son Yorum: canbir
  C Dll indeki Callback Nasıl Çevrilir? (Çözüldü) erkankurtaga 13 782 15-04-2018, Saat: 22:11
Son Yorum: ilgazinho
  Merkez Bankası Döviz Kurları Hakkında adelphiforumz 6 135 14-04-2018, Saat: 14:44
Son Yorum: Cyber
  Ext file hakkında seci20 5 236 05-04-2018, Saat: 12:25
Son Yorum: uparlayan



Konuyu Okuyanlar: 1 Ziyaretçi