解析网站

时间:2014-08-04 19:11:40

标签: c# javascript html progress-4gl

我生成了一个包含部件号列表的文件(文本或csv)。我需要获取此列表,并自动下载这些部件的一些规格表然后打印。进入网站后,我需要输入部件号,然后打印结果。最好的方法是什么?

好的大家,这就是我以前做过的事情,但是需要一个多小时才能将进度4gl(版本9.1)数据库处理到Unix Red-Hat服务器上的QAD环境v8.6e中:

FNAME=`date +%y%m%d%H%M%S`

echo requiredmcpartno=$1 | lynx -accept_all_cookies -nolist -dump -post_data 75.144.##.###/specdata/specdata.asp 2>&1 | tee $FNAME | lp -d$2   >>/apps/proedi/####/ftp/log/brownart.log

grep "Unit of Issue" $FNAME | cut --delimiter=: --fields=2 | awk '{print $1}'

grep -q "PACKAGING SPEC IS OBSOLETE FOR THIS PART NUMBER" "$FNAME"
if [ $? -eq 0 ]; then
  echo 0
  echo nopic
  exit
fi

cd /apps/proedi/####/ftp/ftpscripts
rm -fr 184.168.##.###/ 75.144.##.###/ www.google-analytics.com/ 2>&1   >>/apps/proedi/####/ftp/log/brownart.log
wget -p -m -k -K -E -H --cookies=on --post-data="requiredmcpartno=$1"   75.144.##.###/specdata/specdata.asp >/dev/null 2>&1

/apps/proedi/####/ftp/ftpscripts/printspec.sh $1 $2 >>/tmp/printspec.log 2>&1

cat /apps/proedi/####/ftp/ftpscripts/"$1".pt
rm -f /apps/proedi/####/ftp/ftpscripts/"$1".pt

 >>/apps/proedi/####/ftp/log/brownart.log
rm $FNAME 2>&1 >>/apps/proedi/ford/ftp/log/brownart.log

然后printspec.sh脚本:     FILE = 184.168.70.174 / partandpackagingphotos / PhotoDetailsS​​pecdata.aspx \ 2 P \ = $ 1.HTML

if [ ! -f "$file" ]; then
  echo nopic >/apps/proedi/ford/ftp/ftpscripts/"$1".pt
  exit
fi

grep -q "No Pictures Available for this Part Number" "$file"
if [ $? -eq 0 ]; then
  echo nopic >/apps/proedi/ford/ftp/ftpscripts/"$1".pt
  exit
fi

html2ps -i .7 184.168.70.174/partandpackagingphotos/PhotoDetailsSpecdata.aspx\?p\=$1.html | lp d$2 -s

echo picfnd >/apps/proedi/ford/ftp/ftpscripts/"$1".pt

wget命令需要很长时间才能在Unix中处理。我们的客户可以每天8-9次向我们发送150-200份的运输文件,每次收到零件时我们都需要下载与每个零件相关的所有图片。
我想要制作一个平面文件(文本或csv),然后让用户在他们的Windows计算机上运行批处理文件以连接到unix服务器,并将文件下载到他们的计算机。在此之后,然后在Windows端具有相同的批处理作业或excel模板或某些内容下载图片并将规格表打印到其默认打印机。

很抱歉没有发布所有这些。

1 个答案:

答案 0 :(得分:0)

我要尝试的第一件事是将进程分成两个或多个独立的部分并并行运行它们。上面的脚本似乎将部件号作为参数。我猜想无论是什么喂它们,零件编号都是从一个列表(“传输文件”?)开始工作的。这个列表是显而易见的分割位置。

如果你这样做,并发进程的数量是可配置的,那么找到“最佳位置”应该很简单。假设要下载的部件列表位于名为“part”的表中,其中包含“needsDownload”和“partNum”字段。为简单起见,我们假设partNum是一个整数,并且需要下载的实际部件号是随机分布的。如果您使用Progress 4GL代码驱动此过程,您可能会编写如下控制程序:

/* control.p
 *
 * to run two "threads":
 *
 *   _progres -b dbName -p control.p -param "1,2" > control.1.log 2>&1 &      # 1 of 2
 *   _progres -b dbName -p control.p -param "2,2" > control.2.log 2>&1 &      # 2 of 2
 *
 *
 */  

define variable myThread   as integer no-undo.
define variable numThreads as integer no-undo.

myThread   = integer( entry( 1, session:parameter )) - 1.  /* this just allows the "1 of 2" stuff to be more "human sensible" */
numThreads = integer( entry( 2, session:parameter )).

for each part exclusive-lock where needsDownload = true and (( partNum modulo numThreads ) = myThread ):

  os-command value( "getpart.sh " + string( partNum )).
  needsDownload = false.

end.

当然问题可能是外部系统太慢了。没有多少编程可以解决这个问题。