2009-06-26 1 views
2

몇 가지 기본 피드 처리가 필요했습니다. 따라서 ftp를 통해 파일을 가져 와서 처리하고 (즉, 내가 신경 쓰는 필드를 얻음) 로컬 데이터베이스를 업데이트하십시오. 그리고 비슷하게 다른 방향 : db에서 데이터를 가져 와서 파일을 만들고 ftp로 업로드하십시오. 스크립트는 cron에 의해 호출됩니다.원격 텍스트 파일, 프로세스 및 업데이트 데이터베이스 - 접근 방식 및 스크립팅 언어를 사용할 수 있습니까?

피드의 각 유형에 대한 아이디어가 있다고 생각합니다. ftp 연결/파일 정보를 정의하십시오. 그런 다음 파일의 데이터 필드가 응용 프로그램에서 사용할 수있는 데이터 필드와 관련되는 방법에 대한 번역이 있어야합니다 (물론이 번역을 처리해야합니다). 또한 다른 피드에 사용될 수있는 다른 개체에 대한 일반적인 삽입 기능을 수행하는 별도의 스크립트를 작성하십시오.

전자 상거래의 예로, 내가 피드를 제공하는 다른 공급 업체와 협력하고 있다고 가정 해 보겠습니다. 피드는 제품, 카테고리 또는 주문 정보와 같이 서로 다른 (객체) 유형이 될 수 있습니다. 각 유형의 피드에 대해서는 분명히 다른 필드와 함께 작업하고 다른 업데이트 또는 삽입 스크립트를 호출합니다.

이 기능을 구현하는 데 가장 적합한 언어는 무엇입니까? PHP로 작업 할 수 있지만 Perl이나 Python을 배우기 시작하는 프로젝트를 찾고 있는데 이것이 나에게도 도움이 될 수 있습니다.

Perl 또는 Python의 경우 간단히 상위 수준 구현을 제공 할 수 있습니까? 그래서 다른 스크립트, 객체 지향 접근법을 분리하는 법, 앞으로 새로운 피드 나 처리 함수를 구현하는 방법 등등.

[전체 공개 : 이전에 PHP로 작성된 클래스가 이미있었습니다. 최근에 새 피드를 만드십시오. 나는 이미 내 일을했지만 지저분하고 어렵다. 따라서이 질문은 '제 일을 도와주세요'가 아니라 내 자신의 발전을 위해 '최선의 접근 방식'을 사용하는 질문 유형입니다.]

감사합니다!

답변

2

"최고의"언어는 꽤 주관적입니다. 파이썬은 일반적으로 배우기 쉽고 읽기 쉽다고 생각하는 반면 Perl은 종종 "쓰기 전용"언어라고도합니다. 반면에 Perl은 네트워크 관리에 광범위하게 사용됩니다. 파이썬은 대규모 시스템 관리 또는 프로그래밍을 위해 더 많이 사용되는 경향이 있습니다. 둘 다 탁월한 분야와 잘 작동하지 않는 분야가 있습니다.

어느 언어로든 문제를 쉽게 해결할 수 있습니다. 그들은 둘 다 번들 라이브러리로 필요한 모든 모듈을 갖거나 쉽게 사용할 수 있습니다.

것은 내가 각 프로젝트에 대한 설정을 저장하기 위해 ConfigParser

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

을 사용 파이썬을 사용한 경우, FTPLIB :

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

FTP 서버에 이야기하고하는 많은 데이터베이스 라이브러리 중 하나. 코드의 관점에서

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

:

http://www.pygresql.org/

마지막 명령 행 옵션에 대해 내가 파이썬과 함께 제공되는 훌륭한 옵션 파서 모듈을 사용합니다 : 예를 들어, 당신은 포스트 그레스를 사용하는 가정 다음과 같은 객체가 있습니다.

# 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 

각 클래스는 다음과 같이 변환합니다. o/다른 보완적인 클래스들 중 하나로 전달 될 수있는 정규 형식으로부터.

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

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

을 그리고 마지막으로, 당신은 이런 식으로 부를 것이다 : :

설정 파일은 다음과 같이 나타납니다

process_feed.py --feed=GetVitalStats 
+0

+1 : 좋습니다. 한 가지를 제외하면 configparser는 쓸모가 없습니다. 그냥 파이썬 코드를 작성하십시오. 파이썬이 해석되기 때문에 별도의 설정 파일이 필요하지 않습니다. 더 간단하고 빨리 시작하고 실행할 수 있습니다. –

+0

"펄은 네트워크 관리에 광범위하게 사용됩니다. 파이썬은 시스템 관리 또는 프로그래밍을 위해 더 많이 사용되는 경향이 있습니다 ..." 이 문제에서 파일을 ftp하는 것은 상대적으로 간단하고 무엇이 최선인지에 대해 자세히 설명합니다. 텍스트 파일과 db 데이터를 구문 분석합니다. – safoo

+0

파이썬 파일을 설정 파일로 사용할 때의 문제는 설정 파일을 누가 편집 할 것인가에 달려 있습니다. 프로그래머가 아닌 사람들은 왜 물건을 따옴표로 묶어야하는지 이해하지 못합니다. 왜 문자열에 \ 대신 \를 써야합니다. 또한 configparser 섹션은 사전 IMHO에 바인딩하는 것보다 훨씬 명확하게 읽을 수 있습니다. :-) – Christopher

1

대부분의 현대 언어 스크립팅 언어를 사용하면 이러한 모든 작업을 수행 할 수 있습니다. 그렇기 때문에 귀하의 언어 선택은 귀하와 귀하의 코드를 읽는 사람들이 알고있는 것에 근거해야한다고 생각합니다. 는 FTP 사이트에 액세스 할 수

순 :: FTP :

는 펄에서 나는 다음과 같은 모듈을 사용 할 것입니다. DBI를 사용하여 데이터베이스에 데이터를 삽입하십시오.

그런 모듈은 재사용 할 필요가없는 재사용 가능한 코드 조각으로, FTP 사이트와 데이터베이스와의 상호 작용이 매우 일반적이어서 모든 최신 스크립팅 언어는 비슷한 모듈을 가져야합니다.

필자는 PHP가 훌륭한 언어라고 생각하지 않으므로 가능하면 피할 수 있지만 경험이 많으면 이해할 수 있습니다.

+0

감사합니다. 나는 PHP를 알고 있지만,이 질문은 다른 언어를 배우는 과정을 시작하기위한 변명 일뿐 아니라 일반적인 문제의 유형에 올바른 접근 방식이나 언어를 사용하는 것입니다. – safoo

3

를 종류의 당신은 ftp를하고있는 파일의 형식에 따라 달라집니다 ' ing. 미친 독점 형식 인 경우 이미 라이브러리에서 라이브러리를 관리하고있는 언어가 무엇이든 상관하지 않을 수 있습니다. 그것이 CSV 또는 XML이면 모든 언어가 할 수 있습니다.

  • FTP : Net::FTP
  • 구문 분석 : Text::CSV_XS (XML) 또는 XML::Twig
  • 삽입 (CSV 또는 탭으로 구분 용) : 거기에 높은 수준의 래퍼는,하지만 너무 귀하의 적절한 DB 드라이버 DBI, 예 : DBIx::Class.

예와 같이. 꽤 똑바로 보이지만 거의 매일 펄을 사용합니다. ;-)

+0

XML, CSV 또는 탭/문자로 구분 된 파일이라고 가정합니다. – safoo

+0

설정 파일은 Python 게시판에 언급되어 있기 때문에 : YAML (Perl과 조금 닮았지 만 JSON과 잘 겹치지 만) 또는 COnfig :: General. (또는 Config :: Any, 물론.) – ijw

1

파이썬.

첫 번째. 이 FTP 파일은 어떤 형식입니까? 나는 그들이 CSV라고 가정 할 것이다.

2nd. FTP를 실행할시기를 어떻게 알 수 있습니까? 고정 일정? 행사? 고정 일정이라고 가정합니다. 이것을 제어하기 위해 cron을 사용할 것입니다.

FTP get, data extract, DB load의 세 가지 문제가 있습니다.

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() 
관련 문제