Perl LWP:从“国家地理每日图片”到“Cell最近一期的封面”

在网上看到了一个从国家地理杂志网站下载每日图片的Perl程序。因为网站改版,脚本已经不能正常运行,经过修改后,经测试可以将每日图片下载到当前目录,代码如下:

#!/usr/bin/perl
# author:
# Seraphxby
# Purpose:
# 查看国家地理每日图片的Perl脚本
# history:
# v0.1 first draft
# 2010-12-8 modified by gaospecial
use warnings;
use strict;
use LWP::Simple;
my $url='http://photography.nationalgeographic.com/photography/photo-of-the-day';
my $content = get( "$url" ) || die "get the page failed!\n";
my $img;
if ($content =~ m/(.*?<\/a>)/s) {
$content = $1;
if($content =~ m/<img.*?src="([^\t]*?)"/){ # 非贪婪的数量词 *?,匹配中不含有跳格\t
$img = $1;
if($img =~ m/^(.*?)([^\/]+$)/){
$url = $1;
$img = $2;
getstore($url.$img,$img) || die "get img failed!\n";

}
}
}

 

然后,为了能够下载Cell的封面,将脚本中的相应参数修改后,类似的,可以从cell网站下载封面图片到当前目录。代码如下:

 

#!/usr/bin/perl
# author:
# gaospecial@gmail.com 2010-12
# Purpose:
# 获取最近一期Cell杂志封面的Perl脚本

use warnings;
use strict;
use LWP::Simple;
my $url='http://www.cell.com/current';
my $content = get( "$url" ) || die "get the page failed!\n";
my $img;
if ($content =~ m/(.*?<\/div>)/s) {
$content = $1;
if($content =~ m/<img.*?src="([^\t]*?)".*<p.*>(.*)<\/p>/){ # get url and cation
my $img_src = $1;
my $img_cation = $2;
if($img_src =~ m/^.*?([^\/]+$)/){ # get image name
my $img_name = $1;
getstore($img_src,$img_name) || die "get img failed!\n"; # save image to current dir
}
}
}

 

此处的两部分代码,可以作为Perl LWP模块的入门范例。

Posted from GScribble.

志哀:2010-11-15 上海大火

事件过去2天了。看着死难人尸体和现场图片,心中感觉怪怪的。看到人们在熏成通体黑色的楼底,放下鲜花,才感觉到一点安慰。

以此日志,致哀!

韩寒的博客:十一月大火的过程
网易图片报道:上海教师公寓火灾全程图片报道
嗨!历史:1911年,一场改变了美国的火灾

Posted from GScribble.

Linux下命令行压缩照片或图片的脚本

硬盘空间不足。
有一些毕业时候拍摄的照片,量很多,每个都有2M多,非常占用空间。在windows下面,常常用光影魔术手进行批处理,在Linux下面,那就用到了imagemagick(翻译过来也是“图片魔术师”——说不定是光影魔术手的祖师爷呢,哈哈)。

安装imagemagick
[bash]
>sudo apt-get install imagemagick
[/bash]

压缩图片
最长边设为700px,并在图片左上角添加风格化的水印。
然后,删除原来的照片。
[bash]
>mkdir to
>for file in *.JPG; do
>convert $file -resize 700×700 -pointsize 16 -fill white -stroke black -strokewidth 5 -annotate +20+25 ‘2008 summer’ -stroke none -annotate +20+25 ‘2008 summer’ to/`basename $file`;
>done
>rm *.JPG
[/bash]

备注
imagemagick的功能非常强大,在 http://www.imagemagick.org/Usage/resize/ http://www.imagemagick.org/Usage/fonts/有很多叹为观止的例子参考。

Posted from GScribble.

使用BioPerl和primer3批量设计RT-PCR引物

Update:

  • 我已经设置了一个Massive RT-PCR Primer Designer服务,有需要的朋友可以直接去上传自己基因序列的Fasta文件,然后服务器会将引物返回。
  • 关于Missing SEQUENCE tag错误的处理
  • 以下为原文。
    ———————————————————————————————–
    本文介绍批量设计RT-PCR引物的方法,基于Ubuntu 10.10系统和BioPerl 1.6.1。但是应当适用于大部分Linux系统。

    本文假定你已经安装好BioPerl。

    安装primer3和Bio::PrimerDesigner

    [bash]
    >sudo apt-get install primer3 libbio-primerdesigner-perl
    [/bash]

    修正程序Bug

    Primer3安装之后的可执行文件存在于/usr/bin/primer3_core,而Bio::PrimerDesigner软件包找不到该文件,所以需要建立一个符号链接。
    [bash]
    >sudo ln -s /usr/bin/primer3_core /usr/local/bin/primer3
    [/bash]

    准备序列文件

    将要设计的文件以Fasta格式保存(也可以用其它BioPerl识别的任意格式保存)在当前目录中,此处以seqs.fa命名。

    代码

    然后在当前目录中新建文件designPrimer.pl。
    录入代码如下:
    [perl]
    #! perl -w
    use Bio::SeqIO;
    use Bio::PrimerDesigner;

    my $seqs = Bio::SeqIO->new(-file => ‘seqs.fa’);
    open OUT, ‘>> raw_output.txt’;
    my $pd = Bio::PrimerDesigner->new;
    while( my $seq = $seqs->next_seq() ) {
    my $seqid = $seq->id;
    my $dna = $seq->seq;
    my %params = (
    PRIMER_NUM_RETURN => 1,
    PRIMER_SEQUENCE_ID => $seqid,
    SEQUENCE => $dna,
    PRIMER_PRODUCT_SIZE_RANGE => ‘150-250’, #注意此处参数在perl文档中是错误的,应更正为此
    );
    my $primers = $pd->design( %params ) or die $pd->error;
    my ($left_primer,$right_primer);
    if ( !$primers->left ) {
    warn “No primers found for $seqid\n”;
    }
    else{
    $left_primer = $primers->left;
    $right_primer = $primers->right;
    }
    print join(‘,’, $seqid, $left_primer, $right_primer);
    print “\n”;
    print OUT $primers->raw_output; #此处的perl文档也是错误的,应更正为此
    }
    [/perl]

    保存引物

    打开终端,输入
    [bash]
    > perl designprimer.pl
    [/bash]
    如果程序运行正常,引物设计的结果将在屏幕上显示,同时应当会有一些警告信息。

    然后,可以将结果用管道命令保存:
    [bash]
    > perl designprimer.pl >primers.csv
    [/bash]

    注释

    raw_output.txt中含有primer3程序运行的完整结果。可以作为额外参考。

    Refers:
    http://search.cpan.org/~smckay/Bio-PrimerDesigner-0.07/lib/Bio/PrimerDesigner.pm

    Posted from GScribble.

    关于GFF3格式

    GFF3是GFF注释文件的新标准。文件中每一行为基因组的一个属性,分为9列,以TAB分开。

    依次是:

    1. reference sequence:参照序列
    指出注释的对象。如一个染色体,克隆或片段。可以有多个参照序列。

    2. source :来源
    注释的来源。如果未知,则用点(.)代替。

    3. type :类型
    属性的类型。建议使用符合SO惯例的名称(sequence ontology,参看[[Sequence Ontology Project]]) ,如gene,repeat_region,exon,CDS等。

    4. start position :起点
    属性对应片段的起点。从1开始计数。

    5. end position :终点
    属性对应片段的终点。一般比起点的数值要大。

    6. score :得分
    对于一些可以量化的属性,可以在此设置一个数值以表示程度的不同。如果为空,用点(.)代替。

    7. strand :链
    “+”表示正链,“-”表示负链,“.”表示不需要指定正负链。

    8. phase :步进
    对于编码蛋白质的CDS来说,本列指定下一个密码子开始的位置。可以是0,1或2,表示到达下一个密码子需要跳过的碱基个数。
    对于其它属性,则用点(.)代替。

    9. attributes :属性
    一个包含众多属性的列表。格式为“标签=值”(tag=value)。不同属性之间以分号相隔。可以存在空格,不过若有“,=;”则用URL转义(URL escaping rule),同时TAB也需要转换为“%09”表示。
    下列的标签已定义:

    ID
    指定一个唯一的标识。对属性分类是非常好用(例如查找一个转录单位中所以的外显子)。
    Name
    指定属性的名称。展示给用户的就是该属性。
    Alias
    名称的代称或其它。当存在其它名称时使用该属性。
    Note
    描述性的一些说明。
    Alias和Note可以有多个值,不同值之间以逗号分隔。
    如:Alias=M19211,gna-12,GAMMA-GLOBULIN

    Other good stuff can go into the attributes field, as we shall see later.

    Posted from GScribble.