mysql调取织梦文章_[织梦DEDE迁移]读取织梦MySQL生成所有文章链接

广告:本人承接迁移织梦到wordpress的业务.

本文阐述了从织梦的Mysql数据库读取数据表,生成所有文章链接的方法。

本文中使用了封装了Mysql常用函数的一个模块DBUtil,代码见链接

1、确认链接的组成结构

这个信息记录在dede的分类表dede_arctype的namerule字段中;

执行SQL语句:SELECT namerule  FROM dede_arctype;

会看到返回结果都是一个值(一般都没有修改):{typedir}/{Y}/{M}{D}/{aid}.html

这意思是,链接由以下字段组成:{typedir}:类型的目录,来源于dede_arctype的typedir字段;

{Y}{M}{D}:文章发布的时间,来源于dede_archives表的pubdate字段;

{aid}:文章ID,来源于dede_archives的ID字段;

2、读取Mysql,拼凑URL

大致过程:读取mysql的dede_arctype表和dede_archives,得到所有链接信息(包括文章ID、类型名称、类型目录、标题、发布日期、自定义文件名)

对于每一个链接,根据第1步骤的介绍装备链接;

至此已经拿到了所有的链接ID、链接标题和链接URL。# -*- encoding:utf8 -*-

from common import DBUtil

import pprint

import datetime

dbUtil = DBUtil.DB('127.0.0.1',3306,'root','','oiayafnq_lwqn')

site_home_url = "http://crazyant.net"

class Link():

def __init__(self, p_linkid, p_title, p_linkurl):

self.linkid=p_linkid

self.title=p_title

self.linkurl=p_linkurl

def __str__(self):

strv="%s\n%s\n%s\n"%(self.linkid,self.title,self.linkurl)

return strv

class DedeLinks():

def __init__(self):

self.allLinks=[]

def getDbArticlesInfo(self):

'''

获取数据库中链接的信息以及对应的分类

'''

rs = dbUtil.query('''

SELECT

dede_archives.id,dede_arctype.typename,dede_arctype.typedir,typeid,title,pubdate,filename

FROM

dede_archives,dede_arctype

WHERE dede_archives.typeid=dede_arctype.id;

''')

return rs

def equipLink(self, typedir, urldate, filename, linkid):

'''

根据分类目录、发布文章日期、自定义连接名(可以为空),链接ID,拼接成一个URL

'''

article_date=str(datetime.date.fromtimestamp(urldate)).replace("-","")

#print filename

link_dir = "%s/%s/%s"%(typedir,article_date[:4],article_date[4:])

if filename.strip()!="":

link = "%s/%s.html"%(link_dir,filename)

else:

link = "%s/%s.html"%(link_dir,linkid)

link = link.replace("{cmspath}",site_home_url)

return link

def getAllDedeLinks(self):

rs = self.getDbArticlesInfo()

for row in rs:

(linkid,typename,typedir,typeid,title,pubdate,filename) = row

linkurl =self.equipLink(typedir, pubdate, filename, linkid)

linkNode = Link(linkid, title, linkurl)

self.allLinks.append(linkNode)

def process(self):

self.getAllDedeLinks()

if __name__=="__main__":

dlinks = DedeLinks()

dlinks.process()

for linkNode in dlinks.allLinks:

print linkNode

其他模块可以访问该模块,采用dlinks.allLinks来访问所有的链接,其中的每个列表元素均包括链接ID、链接标题和链接URL。

相关推荐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值