2

我不得不做一些基本的饲料处理。所以,通过 ftp 获取一个文件,处理它(即获取我关心的字段),然后更新本地数据库。另一个方向类似:从数据库获取数据,创建文件,并通过 ftp 上传。脚本将由 cron 调用。

我认为这个想法是针对每种类型的提要,定义 ftp 连接/文件信息。然后应该翻译文件中的数据字段与应用程序可以使用的数据字段的关系(当然还要处理这种翻译)。另外编写单独的脚本,为可能在不同提要中使用的不同对象执行常见的插入功能。

作为电子商务示例,假设我与向我提供提要的不同供应商合作。提要可以是不同的(对象)类型:产品、类别或订单信息。对于每种类型的提要,我显然使用不同的字段并调用不同的更新或插入脚本。

实现这一点的最佳语言是什么?我可以使用 PHP,但我正在寻找一个项目来开始学习 Perl 或 Python,所以这对我也有好处。

如果是 Perl 或 Python,您能否简要给出高级实现。那么如何分离不同的脚本,面向对象的方法?如何在未来轻松实现新的提要或处理功能等。

[完全披露:已经有一些用 PHP 编写的类,我最近用来创建新的提要。我已经完成了我的工作,但它非常混乱且难以完成。所以这个问题不是“请帮我做我的工作”,而是我自己发展的“最佳方法”类型的问题。]

谢谢!

4

4 回答 4

3

种类取决于您正在 ftp 传输的文件的格式。如果它是一种疯狂的专有格式,那么您可能会被任何已经有库管理它的语言所困扰。如果是 CSV 或 XML,那么任何语言都可以。

就像例子一样。看起来很简单,但我几乎每天都做 perl ;-)

于 2009-06-26T16:58:06.450 回答
2

“最佳”语言是相当主观的。Python 通常被认为易于学习和阅读,而 Perl 通常被戏称为“只写”语言。另一方面,Perl 广泛用于网络管理。Python 往往更多地用于系统管理或大型编程。两者都有卓越的领域,也有他们不擅长的领域。

任何一种语言都可以让您相当轻松地解决问题。它们都有所有必要的模块作为捆绑库,或者很容易获得。

如果我使用 Python,我会使用 ConfigParser

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

存储每个项目的设置,ftplib:

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

与 ftp 服务器和众多数据库之一进行通信。例如,假设您使用的是 postgres:

http://www.pygresql.org/

最后,对于命令行选项,我将使用 Python 附带的出色的选项解析器模块:

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

从代码的角度来看,我将拥有以下对象:

# 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

每个类都转换为/从规范格式转换,该格式可以交给其他互补类之一。

配置文件可能如下所示:

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

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

最后,您可以这样称呼它:

process_feed.py --feed=GetVitalStats
于 2009-06-26T16:54:24.113 回答
1

大多数现代语言脚本语言允许你做所有这些事情。因此,我认为您选择的语言应该基于您和阅读您的代码的人所知道的。

在 Perl 中,我将使用以下模块:

Net::FTP 访问 ftp 站点。DBI 将数据插入数据库。

像这样的模块是很好的可重复使用的代码片段,您不必编写,并且与 ftp 站点和数据库的交互非常普遍,以至于每种现代脚本语言都应该有类似的模块。

我不认为 PHP 是一门很棒的语言,所以我会尽可能避免使用它,但如果你有丰富的经验,它可能对你有意义。

于 2009-06-26T16:54:08.543 回答
1

蟒蛇

第一个。这些 FTP 文件是什么格式的?我假设它们是 CSV。

第二。你怎么知道什么时候运行 FTP 获取?固定时间表?事件?我假设这是一个固定的时间表。您将使用 cron 来控制它。

您有三个问题:FTP 获取、数据提取、数据库加载。

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()
于 2009-06-26T17:08:06.780 回答