PHP bir kullanıcı dostu bir şekilde dict çıkışını ayrıştırmak nasıl?

1 Cevap php

I am trying to implement a dictionary-type service. I send a request with php using cURL to dict.org with the dict protocol. This is my code (which on its own works and may be helpful for future readers):

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "dict://dict.org/define:(hello):english:exact");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$definition = curl_exec($ch);
curl_close($ch);

echo $definition;

Sunucu beklendiği gibi birçok başlıklarıyla birlikte, tanımını verir (ihtiyacım yok). Yanıt şöyle:

220 miranda.org dictd 1.9.15/rf on Linux 2.6.26-2-686 <auth.mime> <29631663.31530.1250750274@miranda.org>
250 ok
150 3 definitions retrieved
151 "Hello" gcide "The Collaborative International Dictionary of English v.0.48"
Hello \Hel*lo"\, interj. & n.
   An exclamation used as a greeting, to call attention, as an
   exclamation of surprise, or to encourage one. This variant of
   {Halloo} and {Holloo} has become the dominant form. In the
   United States, it is the most common greeting used in
   answering a telephone.
   [1913 Webster +PJC]
(... some content removed)

.
250 ok [d/m/c = 3/0/162; 0.000r 0.000u 0.000s]
221 bye [d/m/c = 0/0/0; 0.000r 0.000u 0.000s]

Ben merak ediyordum:

a) kıvırmak için belirtmek için bir yolu var mı (ya da tüm bu ekstra bilgi dönmek değil dict protokolünde bir seçenek) (yani 250 ok [d/m/c = 3/0/162; 0.000r...])

b) Muhtemelen dict yanıtı en kullanıcı dostu bir şekilde gösterilmez bilgi verdiğini fark ettim. Biri bana güzel bir şekilde bu görüntüler sağlayacak herhangi bir mevcut php kütüphane biliyordum merak edildi. Aksi takdirde ben kendi kod olurdu.

c) Bu en Sözlük web sitelerinin tanımlarını almak yolu, bunu nasıl yaparsınız değilse? Benim anlayış olarak en kapsamlı sözlüğü veritabanı (dict protocol destekler ve benim cURL isteği yolluyorum nerede) dict.org de biridir.

Teşekkür ederiz!

1 Cevap

Ben başlamadan önce ben dict protokolünün spesifik bilmiyorum bana devlet.

Ben sadece metni sunan bir isteği oluşturmak mümkün olacak şüpheliyim. Eğer atmak istediğiniz bilgi durum bilgileri gibi görünüyor ve bu nedenle yararlıdır.

Ben aşağıdaki gibi bu idare ediyorum yoludur:

  1. Her satırı dizideki bir ayrı bir giriş böylece bir diziye kıvırmak yanıt verisini oku. Sen explode() ve bunu yapmak için yeni satır karakteri (\ n) en bölünmüş kullanabilirsiniz.
  2. Dizi yineleme, EG for ($response as $responseLine) {}
  3. tanım bulmak için $ responseLine bir regex (veya desen eşleştirme diğer bazı formu) gerçekleştirin. Gerçek metin bir sayı ile başlamıyor sadece $ responseLine gibi görünüyor.

Sen dict protokol kullanır CharacterSet ne kontrol etmek isteyebilirsiniz. Ben herhangi bir hata işleme söz değil, ama bu yalındır olmalıdır.