Forum: Ders Arası RSS
Html işler kütüphane
Sayfa:  önceki  1  2 
zafer #16
Üye Tem 2009 tarihinden beri · 695 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12322
erdem on 2016-12-10, 09:19:
Adresleri okuyan bir yapı üzerinde çalışıyorum.

Ben tam olarak anlamadım. Web sayfalarını dolaşın bir bot mu yapmak istiyorsun yoksa web sayfası içeriğini yerele indiren bir uygulama mı?
https://github.com/zafer06 - depo
erdem (Moderatör) #17
Üye Tem 2009 tarihinden beri · 940 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Dokuwiki sayfalarından normal bir web sayfası oluşturan bir uygulamayı D diline aktarmaya çalışıyorum.

Siteyi böcüler, botlar vs.. sarmasın diye açık yazmıyorum ama erdem.tk adresine wiki/arduino/arduinobaslangic.html ekleyin. Orada bir dokuwiki sayfası var.

O sayfadan bootstrap şablonu kullanan bu web sayfasını otomatik oluşturuyor.

http://www.erdem.tk/arduino/arduino-başlangıç

Hatta bu ana bölümleri de:

http://www.erdem.tk/arduino/

İleriki aşamada kullanıcı wiki üzerinde değişiklik yaptığı zaman otomatik olarak sayfaları güncelleyecek şekilde bir program yazmaya çalışıyorum.
zafer #18
Üye Tem 2009 tarihinden beri · 695 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Şimdi anladım  :-D  Gayet başarılı görünüyor. Sanırım büyük bir kısmını tamamlamışsın, çevrilen sayfada gayet düzgün görünüyor.
https://github.com/zafer06 - depo
erdem (Moderatör) #19
Üye Tem 2009 tarihinden beri · 940 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Şu an site aslında tamamen işlevsel yani yayınlamak istediğimiz içeriğin tamamı yayınlanıyor ama tam otomatik değil.
Arka planda python programı çalışıyor. Hangi sayfaları yayınlamak istediğimizi de yayındakiler.html kütüğündeki sayfalar belirliyor. O da bir filtre oluşturuyor.

~~NOCACHE~~

{{pagequery>@:arduino @:ubuntu @:dersler @:yunusemre @:yazilar @:kitap *;sort=ns,name;cols=1; filter=!name:(deneme|sekizled|neler|apache2)}}


Buraya yayınlanmasını henüz istemediğim taslak halinde olan yazıları ekliyorum. Aslında daha iyisi belki her sayfaya yayınla gibi bir düğme eklenebilir ama bunun için dokuwiki eklentisi yazmak gerekiyor sanırım.

D programı henüz emekleme aşamasında!   :-)
erdem (Moderatör) #20
Üye Tem 2009 tarihinden beri · 940 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
ftp ile dosyaları karşıya yükleme kısmını ekledikten sonra D kodu kabaca bitti sayılır.

Göstermek için elle bir tane yükledim.

http://www.erdem.tk/eskiler/arduino

Kabaca diyorum çünkü eklenebilecek çok özellik var. Örneğin program site haritasını kendisi oluşturabilir, bir tane web örümceğine ihtiyacımız olabilir. Tüm bunların dışında programı görsel bir uygulamaya çevirmeyi düşünüyorum ki D ile GTKD kullanarak görsel bir uygulama yazmak benim için de bir ilk olacak.

Bu arada vibe.d ile yazılmış bir günlük dikkatimi çekti.

https://github.com/rejectedsoftware/vibelog

vibe.d'nin DIET şablonlarını kullandığını biliyoruz.

https://tour.dlang.org/tour/en/vibed/diet-templates

Benim merak ettiğim acaba normal html kütüklerini de şablon olarak kullanabiliyor muyuz. Böylelikle site içeriğini arsd.dom oluşturur diğer taraftan vibe.d'nin sunucu özelliklerinden faydalanabiliriz.

Bunu da şu şekilde örneklendirebiliriz. Ortamın sıcaklık nem bilgilerini ölçen bir Arduino uygulamamız var. Bunu sunucu tarafında yayınlamak istiyoruz. Normal site içeriği yanında işte bu tür bir uygulama için de vibe.d'nin özelliklerinden faydalanıyoruz. Umarım ben de doğru anlamışımdır.  ;-)
Bu mesaj 2 defa değişti; son değiştiren: erdem; zaman: 2016-12-24, 09:14.
Değişiklik nedeni: vibe.d kısmını ekledim
acehreli (Moderatör) #21
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4481 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Harika! :)

Ali
zafer #22
Üye Tem 2009 tarihinden beri · 695 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #20
erdem on 2016-12-24, 08:46:
Bu arada vibe.d ile yazılmış bir günlük dikkatimi çekti.

https://github.com/rejectedsoftware/vibelog

Güzel işler yapıyorsun Erdem. Bende bir süre önce kendi günlük sitemi yeniden kurmaya karar verdim ve bunun için vibelog kullanıyorum. Şimdilik yolun başındayım adres ise şöyle http://www.zafer.in
https://github.com/zafer06 - depo
erdem (Moderatör) #23
Üye Tem 2009 tarihinden beri · 940 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Çok güzel.

Peki yayınlamak için sanal sunucu mu kiralamak gerekiyor.

Benim en merak ettiğim konu DIET şablonları yerine
doctype html
html(lang="en")
  head
    // D code is evaluated
    title #{pageTitle}
    // attributes
    script(type='text/javascript')
      if (foo) bar(1 + 5)
    // ID = body-id
    // style = the-style
    body#body-id.the-style
      h1 DIET template
normal html şablonları kullanılabiliyor mu. Ya da bu şablonun üzerine html kodu eklenebiliyor mu.

Eğer öyle bir olanak olmuş olsa çok ilginç uygulamalara kapı açabilir  :-)
erdem (Moderatör) #24
Üye Tem 2009 tarihinden beri · 940 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #22
zafer:
Şimdilik yolun başındayım adres ise şöyle http://www.zafer.in

Sanırım şimdilik bir hata var.  Yorum yazmaya çalışınca Error 502 bad gateway hatası verdi.
zafer #25
Üye Tem 2009 tarihinden beri · 695 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
erdem on 2016-12-25, 22:39:
Yorum yazmaya çalışınca Error 502 bad gateway hatası verdi.

Eyvallah Erdem'im senin yüreğine sağlık :) Vibelog projesine katkı yapmak isterdim ama iletişim konusunda halen sınırlamalar var. Dolayısıyla bende projeyi fork edip kendi yolumda yürümeye başladım. Örneğin hash işlemi ile ilgi bazı sorunları vardı bunun için bende dauth paketini ekleyerek hash işlemlerini yeniden düzenledim. Ayrıca yaml konusunda derleme hataları vardı. Benim ihtiyacım olmadğı için yaml paketini kaldırdım. Ancak yoğunluktan pek bakamıyorum. İlk fırsatta yorum bölümündeki hatayı düzelteyim. Teşekkürler.

Sunucu kiralama konusunda haklısın neticede bir web uygulaması olduğu için bir şekilde onu insanlara sunmak gerekiyor. Vibe.d çalıştırılabir bir dosya oluşturduğu için mevcut paylaşımlı hostinglerde kullanma şansın pek yok. Bu yüzden sana bir VPS gerekecek yada benim gibi elinin altında makina varsa bunu bir sunucu haline getirip onun üzerinden yayın yapabilirsin. Örneğin benim sitem http://www.zafer.in kendi oluşturduğum bir linux sunucu üzerinden yayın yapıyor.

HTML konusunu ilk başlarda bende istiyordum ancak diet ile çalışmaya başladıktan sonra bence hiç gerek yok. Ancak bildiğim kadarıyla render mekanizması ile oynayarak kendine uygun bir şeyler yapabilirsin. Bu konu hakkında vibe.d forumlarında yazılar görmüştüm ama ben hiç ilgilenmedim.

Bence sistemin devam ettiği yoldan gitmek ileride gelecek yeni sürümlerle uyum içinde en iyisi eğer bu uymuyorsa belki başka bir ortam düşünülebilir.
https://github.com/zafer06 - depo
erdem (Moderatör) #26
Üye Tem 2009 tarihinden beri · 940 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Sunucu dinamik ip kullanabiliyor mu. Cloudflare'i kullanmanın ne faydası oluyor. Anladığım kadarıyla vibe.d uygulamasını çalıştırınca bir sunucu gibi çalışıyor.

Bu arada ben ftp yükleme kısmında takıldım.
import std.stdio;
import requests;
 
void main() {
    auto rq = Request();
    rq.verbosity = 3;
    auto f = File("test.txt", "rb");
    auto rs = rq.post("ftp://login:password@example.com/test.txt", f.byChunk(1024));
    writeln(rs.code);
    rs = rq.get("ftp://login:password@example.com/test.txt");
    writeln(rs.code);
}
Requests kütüphanesinde yükleme ile ilgili bir örnek var. Bu kısımda kullanıcı@kullanıcı.com diye bir kullanıcı adı girilirse hata veriyor. Bunun için bir hata kaydı oluşturdum.

Farklı bir çözüm olarak arsd.curl'da olduğu gibi ftp kısmına ufak bir ekleme yapmak gerekebilir. Baktım onlar da neredeyse basitçe c örneğini kullanmışlar.

Ben de ftp için şu örneği buldum.

#include <stdio.h>
#include <string.h>
 
#include <curl/curl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#ifdef WIN32
#include <io.h>
#else
#include <unistd.h>
#endif
 
/* <DESC>
 * Performs an FTP upload and renames the file just after a successful
 * transfer.
 * </DESC>
 */
 
#define LOCAL_FILE      "deneme.txt"
#define UPLOAD_FILE_AS  "yuklerken.txt"
#define REMOTE_URL      "ftp://erdem.tk/"  UPLOAD_FILE_AS
#define RENAME_FILE_TO  "ismi-degistirildi.txt"
 
/* NOTE: if you want this example to work on Windows with libcurl as a
   DLL, you MUST also provide a read callback with CURLOPT_READFUNCTION.
   Failing to do so will give you a crash since a DLL may not use the
   variable's memory when passed in to it from an app like this. */
static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{
  curl_off_t nread;
  /* in real-world cases, this would probably get this data differently
     as this fread() stuff is exactly what the library already would do
     by default internally */
  size_t retcode = fread(ptr, size, nmemb, stream);
 
  nread = (curl_off_t)retcode;
 
  fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T
          " bytes from file\n", nread);
  return retcode;
}
 
int main(void)
{
  CURL *curl;
  CURLcode res;
  FILE *hd_src;
  struct stat file_info;
  curl_off_t fsize;
 
  struct curl_slist *headerlist=NULL;
  static const char buf_1 [] = "RNFR " UPLOAD_FILE_AS;
  static const char buf_2 [] = "RNTO " RENAME_FILE_TO;
 
  /* get the file size of the local file */
  if(stat(LOCAL_FILE, &file_info)) {
    printf("Couldnt open '%s': %s\n", LOCAL_FILE, strerror(errno));
    return 1;
  }
  fsize = (curl_off_t)file_info.st_size;
 
  printf("Local file size: %" CURL_FORMAT_CURL_OFF_T " bytes.\n", fsize);
 
  /* get a FILE * of the same file */
  hd_src = fopen(LOCAL_FILE, "rb");
 
  /* In windows, this will init the winsock stuff */
  curl_global_init(CURL_GLOBAL_ALL);
 
  /* get a curl handle */
  curl = curl_easy_init();
  if(curl) {
    /* build a list of commands to pass to libcurl */
    headerlist = curl_slist_append(headerlist, buf_1);
    headerlist = curl_slist_append(headerlist, buf_2);
 
    /* we want to use our own read function */
    curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
 
    /* enable uploading */
    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
 
    /* specify target */
    curl_easy_setopt(curl, CURLOPT_URL, REMOTE_URL);
 
    curl_easy_setopt(curl, CURLOPT_USERNAME, "kullanici@erdem.tk"); 
  //PROBLEM 
    curl_easy_setopt(curl, CURLOPT_PASSWORD, "sifre");
 
    printf("%s",headerlist);
    
 
    /* pass in that last of FTP commands to run after the transfer */
    curl_easy_setopt(curl, CURLOPT_POSTQUOTE, headerlist);
 
    /* now specify which file to upload */
    curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
 
    /* Set the size of the file to upload (optional).  If you give a *_LARGE
       option you MUST make sure that the type of the passed-in argument is a
       curl_off_t. If you use CURLOPT_INFILESIZE (without _LARGE) you must
       make sure that to pass in a type 'long' argument. */
    curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
                     (curl_off_t)fsize);
 
    /* Now run off and do what you've been told! */
    res = curl_easy_perform(curl);
    /* Check for errors */
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));
 
    /* clean up the FTP commands list */
    curl_slist_free_all(headerlist);
    
    /* always cleanup */
    curl_easy_cleanup(curl);
  }
  fclose(hd_src); /* close the local file */
 
  curl_global_cleanup();
  return 0;
}
Ama tabi ftp dizinlerini ekleyen kodu da eklemek gerekecek.  Burada windows kısmında CURLOPT_READFUNCTION isminde bir işlev tanımlamak gerektiğinden bahsediyor. Ama bu nasıl bir işlev olacak anlamadım.
erdem (Moderatör) #27
Üye Tem 2009 tarihinden beri · 940 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
erdem:
Farklı bir çözüm olarak arsd.curl'da olduğu gibi ftp kısmına ufak bir ekleme yapmak gerekebilir.

[...]

Ben de ftp için şu örneği buldum.

[...]

Sanırım buna da gerek kalmadı. Tam ben de C kitabını gözden geçirip ufak C programları yazmaya başlamıştım ki; ben yazana kadar düzeltmişler  ;-)
zafer #28
Üye Tem 2009 tarihinden beri · 695 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #26
erdem:
Sunucu dinamik ip kullanabiliyor mu. Cloudflare'i kullanmanın ne faydası oluyor. Anladığım kadarıyla vibe.d uygulamasını çalıştırınca bir sunucu gibi çalışıyor.

Biz işyerinde sabit (static) IP adresleri kullanıyoruz. Bu yüzden IP sorunu olmuyor. Ben Cloudflare'i DNS hizmeti için kullanıyorum. Böylece kullandığım bilgisayarı Alan adı sunucusu (Domain Name Server) olarak yapılandırmak zorunda kalmıyorum. Ayrıca Cloudflare'in https gibi ek hizmetleride mevcut.

Bildiğim kadarıyla web temelde bir sunucu-istemci modelinde kurulmuş. Yani bir web sayfasını tarayıcıda göstermek istersen onu sunan bir sunucudan talepte bulunmalısın. Dolayısıyla Vibe.d gibi bir framework kendi içinde yerleşik bir web sunucusuyla geliyor. Ancak bilgidiğim kadarıyla çok gelişmiş bir sunucu değil. Ben ana sunucu olara Nginx kullanıyorum.

Bu arada Requests kütüphanesi güzelmiş, bende işyerindeki zip formatındaki e-fatura dosyalarını yedekleme cihazına aktaracak bir uygulama geliştirmeye çalışıyorum. Yedekleme cihazı ftp bağlantılarını kabul ediyor. Sanırım bu kütüphane ile bu işi kotarabilirim. Sen test ettim mi, sorunsuz çalışıyor mu?
https://github.com/zafer06 - depo
erdem (Moderatör) #29
Üye Tem 2009 tarihinden beri · 940 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Açıklamalar için teşekkürler.

Evet ben uzaktaki html dosyalarını indirmek ve sunucuya ftp dosyalarını yüklemek için requests kütüphanesini kullanıyorum.

Örneğin ftp hatası düzeldikten sonra bir dizine ftp yükleyip almak için şu kod kullanılıyor.
    auto rq = Request();
    rq.verbosity = 3;
    rq.authenticator = new BasicAuthentication("kullanici@kullanici.com", "sifre");
    auto f = File("deneme.txt", "rb");
    auto rs = rq.post("ftp://erdem.tk/deneme/çorba.txt", f.byChunk(1024));
    writeln(rs.code);
    rs = rq.get("ftp://erdem.tk/çorba.txt");
    writeln(rs.code);
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  önceki  1  2 
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-09-26, 12:49:30 (UTC -07:00)