WordPress程序采集文章并设置特色图片

WordPress的采集插件挺多, 功能也很强大。但是如果要折腾,还是自己写 :D

下面是我的采集插件里的几个关键函数:

匹配函数(经测试效率最好的一个)

/**
 * 获取第一个匹配的内容
 *
 * @author        Copyright (c) <//sjolzy.cn>
 * @param        string    $str    内容
 * @param        string    $start    起始匹配
 * @param        string    $end    中止匹配
 * @return        string
 */
private function strCut($str, $start, $end){
    $content = strstr( $str, $start );
    $content = substr( $content, strlen( $start ), strpos( $content, $end ) - strlen( $start ) );
    return $content;
}

取出所有匹配的内容

/**
 * 获取所有匹配的内容
 *
 * @author        Copyright (c) <//sjolzy.cn>
 * @param        string    $str    内容
 * @param        string    $start    起始匹配
 * @param        string    $end    中止匹配
 * @return        array
 */
private function strCutAll($str,$start,$end){
    $content    = explode($start,$str);
    $matchs        = array();
    $sum        = count($content);
    for( $i = 1;$i < $sum;$i++ ){
        $tmp = explode($end,$content[$i]);
        $matchs[] = $tmp[0];
        unset($tmp);
    }
    return $matchs;
}

通过上面两个函数, 在使用preg_match_all配合正则表达式, 想要的网页内容基本都能采集到.

效率相对比较高的一个采集网页的函数

/**
 * 根据URL采集网页内容
 *
 * @author        Copyright (c) <//sjolzy.cn>
 * @param        string    $url    链接地址
 * @return        string
 */
private function fetch($url){
    $handle = fopen($url, 'r');
    $content = '';
    while (!feof($handle)){
        $content .= fgets($handle, 10000);
    }
    return $content?$this->utf8_iconv($content):'';
}
//这里的utf8_iconv函数是把GB2312转成UTF-8编码

上面是我的采集插件里的主要函数, 内容采集到手后, 就是各种入库.

WordPress程序采集分类并自动入库

//添加目录
private function addCat($name,$slug,$parent=0,$desc=''){
    $cat = array(
            'cat_name'                => $name,
            'category_description'    => $desc,
            'category_nicename'        => $slug,
            'category_parent'        => $parent
        );
    return wp_insert_category
($cat);
}

WordPress程序采集并保存文章

 

//添加日志
private function addPost($title,$content,$slug='',$cats=array()){
    $post = array(
        'post_title'        => $title,
        'post_name'            => $slug,
        'post_content'        => $content,
        'post_status'        => 'publish',
        'post_author'        => 1,
        'post_category'        => $cats
    );
    return wp_insert_post
( $post );
}

自动设置文章的特色图片

$img    = '网络图片地址';
$p1    = '文章ID';//addPost返回
$attachment_id    = $this->addAttachment($img,$p1);
add_post_meta($p1, '_thumbnail_id', $attachment_id, true);

综上, 可见WordPress程序采集文章并不难..

wordpress子站间相互调用查询

Wordpress站点ID

Wordpress的多站点模式常常有子站互相调用的需要, 查了下, 好在Wp有带子站站点互相切换的函数.

 

从A站调用B站的文章实体的话;使用switch_to_blog($blog_id)
函数, 把B站的Blog_id带进去即可.

//...

调用查询之后使用restore_current_blog()
就能切回当前的站点.

使用 get_current_blog_id() 可以判断当前站点的站点ID.

禅道项目系统代码随记(一)

代码1:

/**
 * Set the member's value of one object.
 * <code>
 * <?php
 * $lang->db->user = 'wwccss';
 * helper::setMember('lang', 'db.user', 'chunsheng.wang');
 * ?>
 * </code>
 * @param string    $objName    the var name of the object.
 * @param string    $key        the key of the member, can be parent.child.
 * @param mixed     $value      the value to be set.
 * @static
 * @access public
 * @return bool
 */
static public function setMember($objName, $key, $value)
{
    global $$objName;
    if(!is_object($$objName) or empty($key)) return false;
    $key   = str_replace('.', '->', $key);
    $value = serialize($value);
    $code  = ("\$${objName}->{$key}=unserialize(<<<EOT\n$value\nEOT\n);");
    eval($code);

    return true;
}

代码2:

/**
 * set Debug
 *
 * @access public
 * @return void
 */
public function setDebug()
{
    if(isset($this->config->debug) and $this->config->debug)
    {
        error_reporting(E_ALL & ~ E_STRICT);
        register_shutdown_function
('saveSQL');
    }
}
 
/**
 * Save the sql.
 *
 * @access protected
 * @return void
 */
function saveSQL()
{
    if(!class_exists('dao')) return;
    global $app;
    $sqlLog = $app->getLogRoot() . 'sql.' . date('Ymd') . '.log';
    $fh = @fopen($sqlLog, 'a');
    if(!$fh) return false;
    fwrite($fh, date('Ymd H:i:s') . ": " . $app->getURI() . "\n");
    foreach(dao::$querys as $query) fwrite($fh, "  $query\n");
    fwrite($fh, "\n");
    fclose($fh);
}
//register_shutdown_function 函数可以设置一个当执行关闭时被调用的另一个函数.也就是说当们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会被调用.

纯代码, C&&V In 禅道项目系统

标签: 代码, 禅道, 随记

再谈jQuery跨任何域

跨域相关的文章老早写过几篇:

jquery url检测遇到的jquery跨域问题及JSONP的使用

PHP - 利用P3P实现跨域

HTTP和HTTPS跨域共享session解决办法

本文是对第一篇的实例补充。

js脚本

$.getJSON
('//sjolzy.cn/?callback=?
&a=1&b=2', function(data) {
    if (typeof(data) == 'object') {
        $.each(data,function(i,j){
            // ...
        });
    }
});

服务端代码

$arr = array("jquery","ajax",array("cross domain","sjolzy.cn"));
$arr['name'] = "kuayu";
echo $_GET['callback'].
"(".json_encode($arr).");";

/* 红色部分是霸气的跨任何域的关键。*/

标签: AJAX, jQuery, 跨域, jsonp

jquery ajax的async参数导致火狐浏览器闪屏

先提下关于jQuery的$.Ajax 的async的作用,

官方的解释是

async Boolean Default: true
By default, all requests are sent asynchronous (e.g. this is set to true by default). If you need synchronous requests, set this option to false. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.

async默认是true, 即为异步方式, $.Ajax执行后, 会继续执行ajax后面的脚步, 直到服务器端返回数据后, 触发$.Ajax里的success方法. 这时候执行的是两个线程.

我的出现闪屏
的情况是:

$.ajax({
    type: "post",
    url: "index.php",
    data: { },
    async:false,
    beforeSend:function(){},
    success: function(data){
        //...
    },
    complete:function(){}
});

在这里, 我的async设为了false, 原意是想返回数据了再执行$.Ajax后面的脚本, 没想到这个地方却导致了在火狐浏览器下出现闪屏.(Firefox 11.0), 滚动条下拉到底部触发ajax的情况.闪屏

最后将async:false注释掉, 也就是async为ture的情况下, 成功解决了火狐浏览器滚动条下拉到底部触发ajax出现闪屏的问题.

国际支付,收款方式—西联,paypal,cashrun cashpay,信用卡渠道

 

电子商务外贸商家,外贸soho。的收款方式主要有:西联,paypal,Cashrun Cashpay,信用卡,TT。

西联汇款   费用:单笔视地区(14-85usd)
优点:实时汇兑,周期3-7天
缺点:费率比较贵

paypal           费率:2.9%~~3.9%  
费用:
1.无开户费及使用费
2.每笔收取0.3$银行系统占用费
3.提现每笔收取35$
4.如果跨境每笔收取0.5%的跨境费
优点:
1. 国际付款通道满足了部分地区客户付款习惯
2. 账户与账户之间产生交易的方式。可以买可以卖,双方都拥有
3:美国EBAY旗下,国际知名度较高,尤其受美国用户信赖。
缺点:
1:PAYPAL用户消费者(买家)利益大于PAYPAL用户卖家(商户)的利益.双方权利不平衡
2: 电汇费用,每笔交易除手续费外还需要支付交易处理费         
3: 账户容易被冻结.商家利益受损失 很多做外贸的朋友都遇到过问题
安全性:
财务信息防火墙,防止未经授权的付款。

Cashrun铠世宝cashpay费率:2-3.2%   根据产品,行业。在费率在区间   支持:paypal,yellowpay,paysafecard,clickandbuy,sofort等支付网关
费用: 
无开户费及使用费,无附加费
优点:
1.加快偿付速度(2~~3天)结算快
2.降低汇率风险
3.提供更多支付网关的选择,支持你喜欢的币种提现。
4.支持10种语言,24/7全天候服务
5.瑞士银行担保,拥有强大的国际背景。
6.一站式服务平台解决商家的所有问题。
缺点:
国内知名度不高
安全性:
不只降低退款率而更专注客户盈利,RTA(风险动态分析)RPA(风险预测评估)及实时升级的IT程序是您交易、资料数据更安全。
特点:安全,快速,费率合理!

信用卡收款:
环讯支付(IPS):国际信用卡 费率:4%  
费用:1.开通费¥7000 
2.使用费¥7000
3.单笔收取10%保证金6个月滚动返还
4.可开通对私结算:开通费2000,交易手续费200元/笔。
优点:
依托环球实业控股,2003开始从事国际支付,品牌知名度在国内较高。
缺点:
国际支付方式单一只能通过信用卡,未与国外银行及第三方支付平台合作
安全性:
1.自主研发A.N.T.信用卡反欺诈系统,通道成功80%~~90%
2.每月拒付率不能超过3%,超过通道马上关闭

E汇通(ECPSS)费率:5%~~8%   费用:不同的通道费用不同,以最普通的非3D为例
1.开通费¥3000
2.使用费¥5000
3.单笔收取10%保证金6个月滚动返还
4.不足¥5000提现每笔手续费¥5.5
5.拒付每笔要收取处理费20$和罚款50$
国际支付起步较晚2010年下半年才开始立项,方式单一
安全性:
1. 与国外风险控制公司共同研发风险防范系统
2.有拒付率要求,出现拒付无赔付,只作为第三方协助解决问题。
信用卡支付有点:1. 便捷。2. 实时。3. 安全。
信用卡支付缺点:1. 交易金额受限制。2. 存在拒付风险。

TT电汇       费用:各自承担所在地的银行费用。买家银行会收取一道手续费,由买家承担。卖家公司的银行有的也会收取一道手续费,就由卖家来 
承担。跟据银行的实际费率计算。(参考费用USD25-40左右)。
优点   1.收款迅速,几分钟到账收款方式有哪些,包括有线下外贸收款方式的
       2. 先付款后发货,保证商家利益不受损失
缺点    1. 先付款后发货,老外容易产生不信任paypal,信用卡外贸收款方式优缺点的 .
        2. 客户群体小,限制商家的交易量
        3. 数额比较大的,手续费高