Google Custom Search API

Merhaba,

Bu yazımda Kelime Ezberle uygulamamda kullanmış olduğum Google Custom Search API ile ilgili bir örnek proje paylaşacağım. Kelime Ezberle uygulamasını incelemek isteyenler buraya tıklayarak uygulamayı inceleyebilirler.

Custom Search API'nin tanımına çok detaylı girmeyeceğim bu API ile ilgili tanımları birçok yerden okuyarak öğrenebilirsiniz. Kısaca bahsedecek olursam. Google Custom Search, geliştiricilerin Google Arama motoruna dayalı özelleştirilmiş arama motoru oluşturmalarına izin veren Google tarafından sağlanmış bir platformdur.

Ben bu API'yi Kelime Ezberle uygulamamda Google Görsellerde bulunan resimleri elde etmekte kullandım. Kendime Google Arama motoruna dayalı özel bir arama motoru oluşturdum ve daha sonra bu API'yi kullanarak özel sorgular ile dilediğim görseli elde ettim.

Örnek projeleri hazırlarken sade ve kullanımı kolay olmasına dikkat etmeye çalışıyorum. Bu konu için ele alacak olursak amacım Google Görsellerden sorguma karşılık gelen verileri çekmek. Bu yüzden projeyi farklı yerlere çekmeye gerek yok. Verileri çektikten sonra zaten geri kalan kısımları üzerine katarak geliştirebilirsiniz ama önce en temelini halletmek.

Bu proje için bir arama motoruna ihtiyaç var. Bunun için Google'ın bize sunduğu iki sürüm var Custom Search Engine (Ücretsiz) ve Google Site Search (Ücretli). Biz ücretsiz Custom Search Engine kullanacağız. Custom Search Engine'in günlük 100 sorgu limiti bulunuyor. Fiyatlandırmaları buradan öğrenebilirsiniz.

Projeye başlamadan önce yapmanız gerekenler:

  1. Google API Konsol'dan Custom Search API'yi etkinleştirin ve API Key'i kopyalayın. Bu işlemin nasıl gerçekleştiğini internette bulabilirsiniz.
  2. Custom Search Engine (Özel Arama Motoru) buradan oluşturun ve Görsel Arama seçeneğini aktif edin. Aramanın yapılmasını istediğiniz siteleri "Arama yapılacak siteler" bölümünden ekleyebilirsiniz. Oluşturma tamamlandıktan sonra "Kodu Al" diyerek "var cx='SEARCH ENGINE ID' " tanımlamasında bulunan arama motoru ID'nizi kopyalayın.

Gerekli verileri elde ettikten sonra istekte bulunacağımız URL'den bahsetmek istiyorum. Aşağıda HTTP GET  isteğinde bulunacağımız Custom Search API'nin formatı bulunuyor.

https://www.googleapis.com/customsearch/v1?

Bu format üzerine ekleyeceğimiz sorgu parametreleri ile arama sonuçlarını elde edebiliriz. Sorgunun başarıl olması için 3 parametrenin mutlaka kullanılması gerekiyor bunlar:

1.API Key

2.Custom Search Engine ID (Belirtme için cx veya cref kullanılabilir. Kendi arama motorumuzu oluşturduğumuz için cx kullanıyoruz.)

3.Aranacak Kelime (Belirtme için q kullanacağız.)

Bunları elde ettikten sonra oluşan formatımız aşağıdaki gibi olacaktır.

GET https://www.googleapis.com/customsearch/v1?key=INSERT_YOUR_API_KEY&cx=017576662512468239146:omuauf_lfve&q=lectures

Sorgumuzu biraz daha özelleştirecek olursak:

Resim Boyutu: "&imgSize=medium" (small,medium,large,xlarge...) ekleyerek aramalarımızda resimlerin boyutlarının hangisi olması gerektiğini belirtebiliriz.

Arama Tipi: "&searchType=image" Görsellerde arama olmasını istiyorsanız arama tipi image olmalı.

Dosya Türü: "&fileType=jpg"  (pdf,png,xls,xml,doc,..) Dosya türünü belirterek aramanızı özelleştirebilirsiniz.

Yukarıda belirttiğim 3 sorgu parametresini projede özelleştirirken kullandım. Bu parametreleri URL'e eklemeniz yeterli. Diğer tüm parametrelere bu adresten ulaşabilirsiniz.

Aradığınız kelimenin görsellerine ait linklerinin bir ArrayList'te toplayan ve ilk sonucu set eden örnek projeme aşağıdaki linkten ulaşabilirsiniz.

 

   Proje Kodu

Kelime Ezberle Import/Export Özelliği Anlatım

Merhaba,

Kelime Ezberle uygulamasında kullanıcılardan gelen istekler doğrultusunda kelimelerin içe ve dışa aktarılması özelliğini ekledim. Şimdilik anlatımı ve işlenmesi kolay olduğu için metin dosyası (.txt) olarak gerçekleştiriliyor. İlerleyen zamanlarda vakit bulursam daha fazla seçenek eklemeye çalışacağım.

Değinmek istediğim bir diğer konuda bu uygulama kelime ezberlemeye yönelik olduğu için makale veya uzun yazılar eklemek isteyenler oluyor. Bunu anlıyorum ilerleyen zamanlarda bu kullanıcılar için ayrı bir uygulama yapmaya çalışacağım.

Kelimeleri düzenlerken dikkat etmemiz gereken en önemli nokta metin dosyasında kelime ismi, kelime anlamı ve kelime örneğinin her birinin bir satıra gelmesini sağlamaktır. Aşağıdaki resimde görüldüğü gibi olmalıdır.

 

 

 

 

 

 

Kelimeleri eklemeden önce metin dosyasının utf8 olarak kodlamayı unutmayın aksi taktirde karakter sorunu yaşayabilirsiniz.

 

Uygulamayı indirmeyenler için bu link üzerinden uygulamayı indirebilirsiniz.

 

13

Android SQLite Özel Karakter Problemi

Merhaba, bu yazımda bir dönem veritabanı işlemlerinde bana zorluk çıkaran özel karakter probleminden bahsedeceğim.

Öncelikle problemden başlayalım. SQLite veritabanınıza kaydetmek istediğiniz bir veri ve bu verinin içerisinde tırnak gibi bir özel karakter olduğunu düşünelim. Böyle bir durumda veri içerisindeki tırnak ile sorguya ait tırnak karışacaktır. Örnek verecek olursak:

"DELETE FROM `TABLE_NAME` WHERE COLUMN_NAME='Gökhan'ın yazısı.';"

Fark ettiğiniz gibi sorgumuzda column name kısmından sonra tırnaklarda bir karışıklık oluyor. Bu durumda aşağıdaki gibi bir hata ile karşılaşırız.

android.database.sqlite.SQLiteException: near "n": syntax error (code 1): ,while compiling:
"DELETE FROM `TABLE_NAME` WHERE COLUMN_NAME='Gökhan'ın yazısı';"

Ben bu problem ile karşılaştığımda aklıma ilk gelen çözüm string replace yapmaktı. Fakat bu sorun sadece tırnak ile bitmiyor. Sadece tırnağın bile değişik türleri oluyor sorgudaki normal tırnak ve yatık tırnak gibi.

Bu probleme çözüm ararken bu tür sorunlar için bir database aracı olduğunu gördüm DatabaseUtils.sqlEscapeString. sqlEscapeString verimizin sorgu ile karışmasını önlüyor. Yukarıda verdiğimiz örnek üzerinden gidecek olursak.

"DELETE FROM `TABLE_NAME` WHERE COLUMN_NAME="+DatabaseUtils.sqlEscapeString(Gökhan'ın yazısı.)+";"

sqlEscapeString adından da anlaşılacağı gibi veriniz içerisinde bulunan özel karakterlerin sorgudan kaçmasını sağlıyor. Kullanımı gayet basit bu araç ile özel karakter problemi yaşamaktan kurtulmuş olursunuz.

Firebase Push Notification

Firebase Push Notification

Firebase Cloud Messaging API'si ile kaydetmiş olduğunuz token'lara push notification gönderebilirsiniz. İnternette uygulama üzerinden push notification gönderebileceğim sade bir örnek bulamadım. Bunun için örnek bir proje hazırladım. PHP + Android kodları ve kullanımına dair açıklamalara buradan ulaşabilirsiniz.

 

Ekran Görüntüleri:

     

Android Sesi Yazıya Çevirme Uygulaması

Android cihazlarımızda mevcut olan kolaylıklardan biri de telefona vereceğimiz sesli komutlar ile bir çok aktiviteyi gerçekleştirebilmemizdir. Sesli komutlar ile rehberdeki birini arama, müzik çaldırma, alarmı kurma, istediğiniz bir sitenin açılmasını sağlama vs. bir çok işlevi gerçekletirebilirsiniz.

Android-Voice-Recognition (1)

Ben bu uygulamamda istediğim kelimeyi söylediği taktirde ekranda basit bir Toast mesajı gösterilmesini sağlayacağım. Toast mesajı yerine daha farklı bir çok şey yapabilirsiniz.

Telefona sesli komutlar verdiğimizde sesimiz tam olarak anlaşılmayabilir bu yüzden bir tahmin listesi oluşturacağız ve bunu ListView içerisinde göstereceğiz. ListView dışında bir de konuş butonu koyalım.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context=".MainActivity" >

  <ListView
   android:id="@+id/listView1"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_weight="1" >
  </ListView>
  
 <Button
   android:id="@+id/konus"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:text="@string/konus" />

</LinearLayout>

Main Activity'ye geçiyoruz burada ListView ve Konuş butonu tanımlamalarını yapıyoruz ve butona tıklandığında yapacağı işlevi yazıyoruz. Ben sesi yazıya çevirme işlemini gerçekleştirmek için "Dinle" adında bir fonksiyon tanımlıyorum butona tıklandğında "Dinle" fonksiyonunun başlamasını istiyorum.

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 tahmin_listesi = (ListView) findViewById(R.id.listView1);
 konus = (Button) findViewById(R.id.konus);
 konus.setOnClickListener(new View.OnClickListener() {

 @Override
 public void onClick(View arg0) {
 Dinle();
 }
 });
 }

Dinle fonksiyonu için Recognizer intenti kullanacağım. RecognizerIntent.ACTION_RECOGNIZE_SPEECH sesi tanıma işlevini gerçekleştirecek. Kullanıcıdan bir şeyler söylemesini bekleyecek, söyledikten sonrada çeviri tahminlerini sonuçlar adında bir diziyi atayacağız dizi içerisindeki tahminleri de ListView'de göstereceğim. StartActivityForResult yapısı bir requestCode ister bunun için check adında bir değişken tanımladım.

 private void Dinle() {
      Intent dinle = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
      dinle.putExtra(RecognizerIntent.EXTRA_LANGUAGE,
      RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
      dinle.putExtra(RecognizerIntent.EXTRA_PROMPT, "Dinliyorum..");
      startActivityForResult(dinle, check);
 }

Şimdide sonuçlar dizisindeki tahminleri ListView'e bağlayalım ve eğer merhaba denmişse Merhaba Dostum şeklinde bir Toast mesajı versin.

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);

 if (requestCode == check && resultCode == RESULT_OK) {
 sonuclar = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
 tahmin_listesi.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1, sonuclar));

 }

 
 for (int i = 0; i < sonuclar.size(); i++) {
 if (sonuclar.get(i).toLowerCase().equals("merhaba")) {
 
 
 Toast.makeText(getApplicationContext(), "Merhaba Dostum", Toast.LENGTH_SHORT).show();
 break;
 }
 }

 }

Projenin tamamını indirmek için tıklayın.

Ekran Görüntüleri..

2014-08-03-12-08-15                   2014-08-03-12-08-22

2.Ders Labview Boolean Girişi Decimale Dönüştürme

Bu uygulamamızda kullanacağımız switch slider'lar yardımıyla boolean olan bir girişi comparison elemanı yardımıyla decimale dönüştüreceğiz. İlk switch'ten aldığımız değeri 4 ile ikinci değeri 2 ile son değeri 1 ile çarpıp son olarak hepsini toplayıp gösterge ile göstereceğiz.

Labview açılışında ön panel ve blok diyagram kısmını yanyana otomatik olarak hizalamak için "ctrl+t" ve hatalı bağlantıları otomatik olarak düzeltmek için "ctrl+b" tuş kombinasyonlarını kullanabilirsiniz.