2013-04-04 58 views
0

这个脚本是完美的costum twitter URL缩短,但由于某种原因,它只是开始把断开的链接。 现在所有的链接都被打破,即使那些以前的链接都很好。 它显示在twitter domain.com/p(somenumber),它在浏览器中打开该URL,而不是重定向到发布。我猜这个问题出现在这个Perl代码中,它是在twitter上自动检查WordPress的帖子。Twitter的URL永久破解的WordPress的帖子

#!/usr/bin/perl -s 

use strict; 

use Data::Dumper; 
use XML::Simple; 

use Net::Twitter; 
use Scalar::Util 'blessed'; 
use WWW::Facebook::API; 
use JSON::Any; 

use lib '/var/www/perl/.'; 

use MyLib::DB; 
use MyLib::Settings; 

my $settings = new Settings(); 
my $config = $settings->getConfig(); 

my $db = new DB(
        dsn   =>$config->{sql_connection}->{dsn}, 
        database =>$config->{sql_connection}->{database}, 
        server  =>$config->{sql_connection}->{server}, 
        login  =>$config->{sql_connection}->{login}, 
        password =>$config->{sql_connection}->{password} 
); 

my %posts = $db->getList('select * from add_ready_post where wp_id > (select max(wp_id) from add_ready_post where is_sent=1) and post_title <> "" limit 1;'); 

my $nt = Net::Twitter->new(legacy => 0); 
my $nt = Net::Twitter->new(
    traits => [qw/OAuth API::REST/], 
    consumer_key  => '', 
    consumer_secret  => '', 
    access_token  => '', 
    access_token_secret => '', 
); 

map { 
    my $message = $posts{$_}[4]; 
    my $id = $posts{$_}[0]; 
    my $url = ' domain.com/p' . $posts{$_}[1]; 
    if ($message ne '') 
    { 
#  print 'Original: ' . $message . "\n"; 
     if (length($message) < 110) 
     { 
      $message = $message . "."; 
     } 
     if (length($message) > 110) 
     { 
      $message = substr($message, 0, 110); 
      $message =~ /.*(\s\w+)$/i; 
      my $newMessage = substr($message, 0, index($message, $1)); 
      $message = $newMessage . '...'; 
     } 

#  print 'Result : ' . $message . $url . "\n"; 

     my $result = $nt->update($message . $url); 
#  print Dumper($result); 

#  print "\n"; 

     my $sql = "UPDATE add_ready_post SET is_sent=1 WHERE id=" . int($id) . ";"; 
     $db->execute($sql); 

    } 
} keys %posts; 

回答

2

你可能会得到与“不是一个真正的问题”封闭 - 但无论如何 - 谈几点看法:

有不知道该怎么“做”你MyLib::DB;,所以不知道不能分析代码什么包含%posts散列。

使用use warnings; - 例如,你会得到$nt redefined消息...

my $nt = Net::Twitter->new(legacy => 0); 
my $nt = Net::Twitter->new(

以这种方式使用map {是不是最佳做法。它将使用

foreach my $post (keys %posts) { 
} 

时,消息将不会匹配在这里,你会得到什么太大可读?那么如果指数返回-1呢?

$message =~ /.*(\s\w+)$/i; 
my $newMessage = substr($message, 0, index($message, $1)); 

而当消息将只包含空格吗?想想:

if ($message ne '') 

这里是更多...我知道比你学习Perl的,但尽量将问题分解到管理的部分,并要求一个真正的问题。