Bir http isteğini veri olarak işlemek

Events happening in the community are now at Drupal community events on www.drupal.org.
keremito's picture

Merhabalar,

Gruba epeydir üyeyim ama ilk defa yazıyorum. Şöyle bir derdim var; drupal sitesinin bir http isteğini veri olarak değerlendirmesini istiyorum. Örneğin şöyle bir adress istendi;

http://benimsitem.com/veri/basınc/5

Bu istemi alan drupal sistemi hata mesajı vermek yerine onun bir veri ilettigini anlayarak basınç=5 atm değerini bir içerik olarak kaydedecek.

Bunu yapmaktaki amacım bir arduino devresi aracılığıyla bir sensörün okuduğu değeri drupale yollayarak içerik olarak kaydedebilmek.

(Arduino devresi server olabilir, drupal oradan data çekebilirdi ama hem statik ip sorunuyla hem de veri çekme işlemini yapabilecek bir hosta taşınmakla uğraşmaktan daha kolay ve ilginç geldi arduinonun client olarak belli zaman aralarında http isteği yapması..)

Biraz drupal sitesinde dolaştım ama tam olarak neye ihtiyacım olduğunu anlayamadım. Fikir verebilirseniz çok sevinirim.

Comments

Kolay da olabilir zor da

pembeci's picture

Öncelikle tek yapmak istediğin bu tip http isteklerini kaydeden bir siteyse Drupal kullanmana gerek yok. Basit bir PHP script ile bunu halledersin.

PHP biliyorsan bir miktar, Drupal eklenti kılavuzunu karıştırarak hızlıca bu işi yapabilirsin:

http://drupal.org/node/1043866

İlla içerik tipi olarak kaydetmen de gerekmiyor şayet veriler böyle basitse ve sonradan üzerlerinde node tipi işlemler yapılmayacaksa (yorum eklemek, etiketlemek vb.). Hazır kendi eklentini yazmışken, veritabanında bir tablo oluşturup oraya yazabilir, daha sonra ilgili bir sayfa yaratıp verileri gösterebilirsin.

Eklenti yazmadan alias'ı "veri" olan bir sayfa yaratabilir, sayfanın içeriği olarak veriyi kaydedecek php kodunu yazabilirsin. ".../veri/basinc/5" gibi bir url ".../veri" sayfasına düşerek işlenecektir ve php kodunda arg fonksiyonuyla url'nin "basinc" (arg(1)) ve "5" (arg(2)) kısımlarına ulaşabilirsin.

Yok şayet PHP bilmiyorsan hazır eklentilerle bu biraz zor sanırım. Benim şu anda aklıma gelen bir yolu yok hatta.

404 hatasını yakalayıp,

Sahin's picture

404 hatasını yakalayıp, bulunamayan URL'nin parçalarını kaydeden bir eklenti arıyorsunuz sanırım. Yaptığım arama sonuçları içinde ilk bakışta uygun bir çözüm göremedim ve belki de bu kadar özel bir eklenti zaten yok. Ama mevcut bir eklentiyi örnek alarak kendiniz de yazabilirsiniz belki. Örneğin Search 404 eklentisi nasıl url'deki anahtar sözcükleri bir arama motorundan döndürüyorsa siz de bunları kaydedersiniz. (Bir güvenlik notu: istemcilerinizin statik IP'si olmadığı için IP-denetimi yapamadığınızdan veriye ek olarak bir de istemci-anahtarı kullanmanız gerekebilir.)
Bir de, aklıma takılan bir soruyu mazur görün: neden bir form verisi olarak göndermiyorsunuz? (Örneğin, http://benimsitem.com/veri?type=basınc&val=5)

veriyi işlemek istiyorum

keremito's picture

cevaplarınız için çok teşekkür ederim..

@pembeci: drupali ve php'yi orta düzeyde biliyorum ve ben de önce basit bir site ile bunu yapabileceğimi düşündüm ancak işin bir de kontrol yanı olacak ve burada drupalin üyelik sistemine ihtiyacım var. bir tür online deney sistemi geliştirmeye çalışıyorum ve diyelim deneyi yapan öğrenciler basıncın ne olması gerektiğine birlikte karar verecekler. elbette bir php kodu da kullanıcıların belirlediği set değerini, şimdiki ve geçmiş değerleri hesaba katarak bir on/off kontrolü yapacak..

veri isimli bir sayfa yaratmak hiç aklıma gelmemişti..http isteğine müdahale etmekten çok daha mantıklı, ama yine de buradan topladığım argümanları bir içeriğe dönüştürmem lazım, çünkü diyelim 5 dakika sonra yeni bir değer gelecek, dolayısıyla her biri farklı bir içerik olarak kaydedilmeli.. yine de şimdi en azından basınç değerini toplayabilmek için bir yol var elimde :)

@sahin: bir form verisi olarak yollarsam içerik olarak kaydedilebilir mi?

PHP varsa, dert yok

pembeci's picture

Öncelikle kısa olan. Şahin'in dediği yöntem drupal'da işe yaramaz çünkü clean url'ler yüzünden farkedilmiyor ama drupal url'leri halihazırda bir query string (?'dan sonrası) içeriyor:

http://benimsitem.com/node/5/edit

şeklindeki url'nin temizlenmemiş en açık hali:

http://benimsitem.com/index.php?q=node/5/edit

index.php üzerinden devreye giren Drupal menu sistemi q(uery) değerini alıyor ve sayfa içeriğini oluşturacak gerekli fonksiyonu çağırıyor.

Dediğim sayfa ekleme yöntemi hacker bir yöntem sonuçta. Ben senin yerinde olsam madem PHP de biliyorum oturur kendi minik eklentimi yazarım. Bu sayede dediğim gibi verileri içerik olarak değil daha sade olarak bir veritabanı içinde de tutabilirim.

Menu sistemiyle ilgili şunlara bir göz atabilirsin (senin için en temel işlevsellik yeterli olacak, yani her detayı anlamaya çalışman gerekmiyor):

http://drupal.org/node/102338

http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_menu/7

http://api.drupal.org/api/examples/menu_example!menu_example.module/7

Veri tabanı ekleme, yazma, okuma vb. için de en temizi şu örnek eklentiye göz atman:

http://api.drupal.org/api/examples/dbtng_example!dbtng_example.module/group/dbtng_example/7

Bu iki örnek eklentideki kod parçalarını minimal değiştirerek kendi eklentini hızlıca yazabilirsin.

COSM'u da öneririm

orkutmuratyilmaz's picture

https://cosm.com/

Binlerce developer bunu kullanıyor. Sen de kullan, sonra oradan XML, CSV ya da JSON formatında aldığın veriyi Drupal'a gömersin.

Vay anasını

pembeci's picture

Analar ne eklentiler doğuruyor. Services tam da ihtiyaca cevap veriyor anlaşılan:

http://drupal.org/node/1334758
https://gist.github.com/affc9864487bb1b9c918

Sade bir çözüm arıyorum

keremito's picture

@Murat: cosm(eski adı pachube) olayına kesinlikle girmek istemiyorum.. basit ve özgür bir sistem kurmaya çalışıyoruz, araya pachube koymak hem basitliği hem özgürlüğü elimizden alacak sanki.. Services'i inceliyorum, kullanmayı düşüneceğim.

@pembeci: Modül yazmak çok zor geliyor, drupal çekirdeğini pek tanımıyorum, phpyi de hackleyerek öğrendim; bir sürü şeyi usulünce yapmıyorum.. Bir de giderek drupalin yanı başında çalışacak drupal dışı çözüm önerin aklıma yatıyor. Veritabanına yazar, grafiğini çizer, drupale embed ederim (ya da bir drupal sayfası grafiği çizer). Böylece Drupalin üyelik, izin vb. sistemlerinden yine yararlanabilirim; kontrol değerinin ne olduğuna üyeler karar verir, php dosyası ise bu set değerini ve veri tablosunu kontrol algoritmasına katarak 0 ya da 1 kararını verir.

Katkılarınız için çok teşekkür ederim, yolumu kısalttınız..

Teşekkür

keremito's picture

Katkılarınızla projeyi tamamladım ve şu siteyi kurdum;

http://onlinebioreactor.org

Ekleme: Drupal'e şimdilik ihtiyacım olmadı; http get fonksiyonu ile deney verilerini iletip kontrol değerlerini çekebildim.. Ayrıntısı zaten sitede anlatılıyor..

book eklentisini kullansan güzel olur

orkutmuratyilmaz's picture

http://onlinebioreactor.org/?q=documentation

bu bölümde işe yarar abi book eklentisi. bi de İstanbul HackerSpace'te bir atölye yaparsan çok makbule geçer.

tebrikler:)

teşekkür

keremito's picture

Sağol Murat,

Belki önümüzdeki sonbahara yapabilirim böyle bir işi.. şu ara grup toplantılarına bile gelecek vaktim yok vallahi..