Yaklaşım ve betik dili kullanmak için - uzaktan metin dosyası, süreç ve güncelleme veritabanı olsun?

4 Cevap php

Ben bazı temel besleme işlemini yapmak zorunda oldum. Yani, ftp üzerinden bir dosya olsun, süreç (yani ben umurumda alanları olsun), ve daha sonra yerel veritabanını güncellemek. Ve benzer diğer yönü: db den veri almak dosyası oluşturun ve ftp ile yükleyin. Komut cron tarafından çağrılır.

Ben fikir, yem her tür için olabilir ftp bağlantısı / dosya bilgileri tanımlamak düşünüyorum. Sonra dosyasındaki veri alanları uygulaması (bu çeviri ve ders süreci) ile çalışabilir veri alanları ile ilgili nasıl bir çeviri olmalıdır. Ayrıca, farklı yemlerde kullanılabilir farklı nesneler için ortak yerleştirme işlevleri yapmak ayrı komut dosyaları yazabilirsiniz.

Bir e-ticaret örnek olarak, bana beslemelerini sağlayan farklı tedarikçiler ile çalışmak diyelim. Ürün, kategori, ya da sipariş bilgisi: beslemeleri farklı (nesne) türleri olabilir. Yem her tür için ben açıkçası farklı alanlarda çalışmak ve farklı güncelleştirme veya ekleme komut dosyaları arayın.

Bu uygulamak için en iyi dil nedir? PHP ile çalışabilirsiniz ama bu da benim için iyi olabilir bu yüzden Perl ve Python öğrenmeye başlamak için bir proje arıyorum.

Perl ya da Python, kısaca yüksek düzeyde uygulanmasını verebilir. Peki nasıl ayırmak için farklı komut, nesne yönelimli yaklaşım?, Kolay gelecekte yeni beslemeleri veya işleme fonksiyonlarını uygulamak için nasıl, vb

[Tam açıklama: Ben son zamanlarda yeni bir yayını oluşturmak için kullanılan PHP ile yazılmış sınıflar zaten vardı. Ben zaten işimi yaptım, ama süper dağınık ve yapmak zordu. Yani bu soru 'işimi yapmama yardımcı olun' değil, kendi gelişimi için sorunun bir 'iyi yaklaşım' tipi değildir.]

Teşekkürler!

4 Cevap

"En iyi" dil oldukça özneldir. Perl sık sık şaka yollu bir "salt" dili olarak adlandırılır oysa Python genellikle, öğrenmesi kolay ve okunması kolay olarak kabul edilir. Öte yandan, Perl ağ yönetimi için yaygın olarak kullanılmasıdır. Python büyük sistem yönetim ve programlama için daha fazla kullanılabilir eğilimindedir. Hem mükemmellik alanları, ve onlar da işe yaramazsa alanlar var.

Ya dili oldukça kolayca sorunu çözmek sağlayacak. Her ikisi birlikte kitaplıkları ya da kolayca kullanılabilir ya gibi tüm gerekli modülleri.

Python kullanarak olsaydı ben ConfigParser kullanmak

http://docs.python.org/library/configparser.html#module-ConfigParser

ftplib, her bir proje için ayarları saklamak için:

http://docs.python.org/library/ftplib.html

ftp sunucusu, ve birçok veritabanı kütüphanelerinden birine konuşmak için. Örneğin, postgres kullandığınızı varsayarak:

http://www.pygresql.org/

Son olarak, komut satırı seçenekleri için Python ile birlikte mükemmel bir seçenek ayrıştırıcı modülü kullanabilirsiniz:

http://docs.python.org/library/optparse.html#module-optparse

Bir kod açısından ben şu nesneler olurdu:

# Reads in a config file, decides which feed to use, and passes
# the commands in to one of the classes below for import and export
class FeedManager

# Get data from db into a canonical format
class DbImport

# Put data into db from a canonical format
class DbExport

# Get data from ftp into a canonical format
class FtpImport

# Put data into ftp from canonical format
class FtpExport

Her sınıf, diğer tamamlayıcı sınıflar birine teslim edilebilir kanonik biçimi / 'çevirir.

Config dosyası gibi görünebilir:

[GetVitalStats]
SourceUrl=ftp.myhost.com
SourceType=FTP

Destination=Host=mydbserver; Database=somedb
SourceType=Postgres

Ve nihayet, bu gibi çağırır:

process_feed.py --feed=GetVitalStats

Tür Eğer ftp'ing konum dosyaların biçimine bağlıdır. Bir deli mülkiyet biçimi ise, zaten onu yönetmek bir kütüphanesi var ne dili ile sıkışmış olabilir. Bu CSV veya XML buysa, o zaman herhangi bir dil yapabilir.

  • FTP: Net::FTP
  • Ayrıştırma: Text::CSV_XS (CSV veya sekmeyle ayrılmış) veya XML::Twig (XML)
  • Yerleştirin: DBI sizin uygun db sürücüsü ile, daha yüksek düzeyde sarma gibi DBIx::Class olarak da, vardır ama.

Sadece örnek olarak. Bu oldukça düz ileri görünüyor, ama ben neredeyse her gün perl yok ;-)

Dilleri scripting En modern diller, tüm bu şeyler yapmak için izin verir. Bu nedenle, ben dil sizin seçiminiz ve kodunuzu okumak insanların bildiklerini dayalı olması gerektiğini düşünüyorum.

Perl Ben aşağıdaki modüllerden faydalanmak istiyorum:

Net::FTP to access the ftp sites. DBI to insert data into your database.

Böyle modülleri yazmak zorunda değilsiniz kod güzel yeniden kullanılabilir parçalarıdır ve ftp siteleri ve veritabanları ile etkileşim her modern betik dili benzer modülleri olmalıdır o kadar yaygındır.

Ben PHP mümkünse eğer öyleyse ben bunu önleyeceğini büyük bir dil olduğunu sanmıyorum, ama bunu deneyim çok şey varsa bu sizin için mantıklı olabilir.

Python.

1st. Bu FTP'd dosyalar ne biçim vardır? Ben onlar CSV kabul etmiş olacaksınız.

2. baskı. FTP olsun çalıştırmak için ne zaman nasıl biliyor musunuz? Sabit tarifesi? Olay? Ben sabit bir planı var sanacaklar. Bunu denetlemek için cron kullanacağız.

FTP olsun, veri ayıklamak, DB yük: Üç sorunları var.

ftp_get_load.py

import ftplib
import csv
import someDatabaseAPI as sql

class GetFile( object ):
    ... general case solution using ftplib ...

class ExtractData( object ):
    ... general case solution using csv ...

class LoadDB( object ):
    ... general case solution using sql ...

some_load.py

import ftp_get_load

class UniqueExtractor( ftp_get_load.ExtractData ):
    ... overrides ...

get = GetFile( url, filename, etc. )
extract = UniqueExtractor( filenamein, filenameout, etc. )
load = LoadDB( filename, etc. )

if __name__ == "__main__":
    get.execute()
    extract.execute()
    load.execute()