首页
登录
搜索
搜索
千古互动
QQ:54505339
累计撰写
42
篇文章
累计收到
1
条评论
首页
栏目
首页
登录
作者 【1】 的文章
2024-5-5
两个接口取IP地址和归属地
https://www.ipplus360.com/getLocation 归属地https://www.ipplus360.com/getIP ip地址
2024年-5月-5日
3755 阅读
0 评论
未分类
2024-5-5
织梦 用星表示软件或Flash的等级 改 数字
修改 include/helpers/include/helpers/channelunit.helper.php 页面调用 [field:softrank function='GetRankStarto(@me)'/] /** * 用星表示软件或Flash的等级 * * @param string $rank 星星数 * @return string */if ( ! function_exists('GetRankStar')){ function GetRankStar($rank) { $nstar = ""; for($i=1;$i<=$rank;$i++) { $nstar .= "★"; } for($i;$i<=5;$i++) { $nstar .= "☆"; } return $nstar; }} 增加一组 if ( ! function_exists('GetRankStarto')){ function GetRankStarto($rank) { $nstar = ""; $nstar = $rank; return $nstar; }}
2024年-5月-5日
1355 阅读
0 评论
未分类
2024-5-5
织梦cms实现彩色tags标签云随机颜色及大小的方法
这篇文章主要为自己在倒腾织梦时候 遇到的事情 织梦彩色标签云tags标签云随机颜色及大小的方法,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴。 1、找到并打开/include/common.func.php文件,在文件最后面加入如下函数: function getTagStyle(){$minFontSize=8; //最小字体大小,可根据需要自行更改$maxFontSize=18; //最大字体大小,可根据需要自行更改return 'font-size:'.($minFontSize+lcg_value()* (abs($maxFontSize-$minFontSize))).'px;color:#'.dechex(rand(0,255)).dechex(rand(0,196)).dechex(rand(0,255));} 上面的函数作用是输出随机的样式,包括font-size和color。如果我们只是想指定显示几个字体大小,而不是完全随机,请将上面的函数代码修改为下面的: function getTagStyle(){$sizearray = array('8','9','10','11','12','20'); //自定义字体大小,可根据需要自行修改return 'font-size:'.$sizearray[rand(0,count($sizearray))]. 'pt;color:#'.dechex(rand(0,255)).dechex(rand(0,196)).dechex(rand(0,255));} 2、在模板中加入下面的代码来调用标签就可以了: {dede:tag row='45' getall='1' sort='hot'}<a href='[field:link/]' title="[field:tag /]([field:total /])" style="[field:total runphp=yes]@me=getTagStyle();[/field:total]">[field:tag /]</a>{/dede:tag} 3、最后在后台生成全站html就可以看效果了。 +++++++++++++++++++++++++++++++++++ 更新 class 元素 // 实现tag标签云的随机样式效果 定义一个 stylefunction getTagStyle(){$minFontSize=12; //最小字体大小,可根据需要自行更改$maxFontSize=22; //最大字体大小,可根据需要自行更改return 'font-size:'.($minFontSize+lcg_value()* (abs($maxFontSize-$minFontSize))).'px;color:#'.dechex(rand(0,255)).dechex(rand(0,196)).dechex(rand(0,255));}// 实现tag标签云的随机样式效果 定义一个 classfunction getTagStyle2(){ //定义一个 class数组$arr =array('style5 f1','style4 f4','style8 f2','style6 f3','style5 f2','style4 f1','style1 f1','style3 f1','style3 f3','style6 f1','style4 f3','style6 f3','style8 f1','style4 f1','style2 f3','style1 f1','style8 f4','style6 f3','style6 f3','style3 f4','style7 f4','style7 f1','style2 f2','style7 f4','style2 f1','style4 f2','style6 f3','style1 f1','style4 f4','style6 f3','style6 f2','style8 f4','style3 f4','style2 f4','style7 f1','style8 f4','style1 f4','style2 f1','style1 f3','style6 f3','style7 f1','style3 f4','style5 f4','style1 f1','style6 f3','style6 f2',); //随机返回数组中一个元素的键值$key = array_rand($arr,1); //输出该元素的值return $arr[$key]; } 前端调用 style 字体样式 {dede:tag row='45' getall='1' sort='hot'}<a href='[field:link/]' title="[field:tag /]([field:total /])" style="[field:total runphp=yes]@me=getTagStyle();[/field:total]">[field:tag /]</a>{/dede:tag} class 元素样式 {dede:tag row='45' getall='1' sort='hot'}<a href='[field:link/]' title="[field:tag /]([field:total /])" class="[field:total runphp=yes]@me=getTagStyle2();[/field:total]">[field:tag /]</a>{/dede:tag} 最后页面的调用 和 CSS <div class="hot_tags clearfix"> {dede:tag row='45' getall='1' sort='hot'}<a href='[field:link/]' title="[field:tag /]([field:total /])" class="[field:total runphp=yes]@me=getTagStyle2();[/field:total]">[field:tag /]</a>{/dede:tag} </div> /*热门标签*/.hot_tags{overflow:hidden;background:#fff; font-size:16px;}.hot_tags a{margin-right:15px; line-height:28px; white-space:normal;word-break:break-all;}.hot_tags a:hover{color:#f60;text-decoration:underline;}.hot_tags .f1{font-size:16px;}.hot_tags .f2{font-size:18px;}.hot_tags .f3{font-size:20px;}.hot_tags .f4{font-size:22px;}.hot_tags .style1{color:#4a9a20;}.hot_tags .style2{color:#CB9E16;}.hot_tags .style3{color:#009cff;}.hot_tags .style4{color:#ff0066;}.hot_tags .style5{color:#0d9f9a;}.hot_tags .style6{color:#884bf8;}.hot_tags .style7{color:#656565;}.hot_tags .style8{color:#FF1717;}/*热门标签*/.hot_tags{overflow:hidden;background:#fff; font-size:16px;}.hot_tags a{margin-right:15px; line-height:28px; white-space:normal;word-break:break-all;}.hot_tags a:hover{color:#f60;text-decoration:underline;}.hot_tags .f1{font-size:16px;}.hot_tags .f2{font-size:18px;}.hot_tags .f3{font-size:20px;}.hot_tags .f4{font-size:22px;}.hot_tags .style1{color:#4a9a20;}.hot_tags .style2{color:#CB9E16;}.hot_tags .style3{color:#009cff;}.hot_tags .style4{color:#ff0066;}.hot_tags .style5{color:#0d9f9a;}.hot_tags .style6{color:#884bf8;}.hot_tags .style7{color:#656565;}.hot_tags .style8{color:#FF1717;}
2024年-5月-5日
852 阅读
0 评论
未分类
2024-5-5
dedecms织梦tag标签使用方法获取最新、本月、随机标签
dedecms织梦tag标签使用方法获取最新、本月、随机标签 1、标签的参数说明: row='6' 调用条数sort='new' 排序方式 month,rand,weekgetall='0' 获取类型0为当前内容页TAG标记,1为获取全部TAG标记 2、使用案例: 最新tag标签 {dede:tag row='30' sort='new'} [field:tag/]([field:count/]) {/dede:tag} 本月热门tag标签 {dede:tag row='30' sort='month'} [field:tag/]([field:count/]) {/dede:tag} 本周热门tag标签 {dede:tag row='30' sort='week'} [field:tag/]([field:count/]) {/dede:tag} 随机tag标签 {dede:tag row='60' sort='rand'} [field:tag/]([field:count/]) {/dede:tag}
2024年-5月-5日
1141 阅读
0 评论
未分类
2024-5-5
织梦默认CKeditor编辑器 上传图片时无法添加图片水印
织梦默认CKeditor编辑器 上传图片时无法添加图片水印 我使用的版本 DedeCMS-V5.7.98-UTF8 织梦的图片集图集模型和编辑器里的多图上传是不能自动加上水印的,我们可以自己设置它自动加上水印 解决方法1、首先确保网站后台的水印功能已经开启成功!水印图片设置正确! 2、 打开 /dede/swfupload.php 找到 大概在 108 行//WaterImg($cfg_basedir.$fileurl, 'up');去掉前面的//,注释 去掉 并且 保存去掉后变成下图这样 3、打开 /dede/album_edit.php 找到 大概在 233 行 左右 $imgurls .= "{dede:img ddimg='$litpicname' text='$iinfo' width='".$imginfos[0]."' height='".$imginfos[1]."'} $iurl {/dede:img}\r\n"; 在它上面加入一行if($photo_markup=='1') WaterImg($cfg_basedir.$iurl, 'up');修改后如图 修改后测试效果
2024年-5月-5日
2968 阅读
0 评论
未分类
2024-5-5
JavaScript 点击按钮弹出一个input输入框
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .demo{ background-color: orange; } </style></head><body> <button id="btn"> 点我创建一个输入框</button> <script> // 返回指定 ID 的元素: const btn = document.getElementById('btn') btn.onclick = () => { // createElement() 方法通过指定名称创建一个元素 const input = document.createElement('input') // input 输入框绑定一个类 input.className = 'demo' // input 初始值 input.value=99 //将上面创建的input元素加入到BODY的尾部 document.body.appendChild(input) // 获取焦点 input.focus() } </script></body></html>
2024年-5月-5日
1752 阅读
0 评论
未分类
2024-5-5
织梦列表页分页php文件,织梦列表页分页竖着排列的解决方法
织梦列表页分页竖着排列的解决方法一: 织梦列表分页调用标签pagelist默认是内置了 标签的,网站样式中没有对标签进行css定义,所以就会出现标签默认的样式,导致表页分页竖着排列,所以我们只需要添加标签的样式就可以的! 假设你在调用列表分页标签的代码如下所示: {dede:pagelist listitem="info,index,end,pre,next,pageno,option" listsize="5"/} 那么只需要在样式中添加一下代码就可以的: .xxx li{float:left;line-height:20px;margin-right:6px;border:1px solid #E9E9E9;list-style:none;} .xxx li.thisclass,.xxx li.thisclass a,.xxx li.thisclass a:hover{background-color:#F8F8F8;padding:2px 4px 2px;font-weight:bold;} (把xxx改为自己网站上写的代码中的div的属性定义,css代码设置到的文字高度、颜色等等数据可以自己修改) 织梦列表页分页竖着排列的解决方法二: 删除内置标签,在网站根目录下includ文件中找到arc.listview.class.php和arc.archives.class.php这两个文件,然后将两个文件中的 <li>全部删除,之后保存,然后就可以! 两个方法都可以解决织梦列表页分页竖着排列的问题,本人已测试,大家自行选择,当然如果你的问题没有解决的话,可以QQ联系本人,帮助解决,有其他问题的话可以留言或前期咨询!
2024年-5月-5日
1014 阅读
0 评论
未分类
2024-5-5
织梦标签调用大全
一、织梦网站常用模板Head区域标签 首页[Head]区域: 标题[Title]:{dede:global.cfg_webname/} 关键词[keywords]:{dede:global.cfg_keywords/} 描述[description]:{dede:global.cfg_description/} 列表页[Head]区域: 标题[Title]:{dede:field.title/}_{dede:global.cfg_webname/} 关键词[keywords]:{dede:field name='keywords'/} 描述[description]:{dede:field name='description' function='html2text(@me)'/} 文章页[Head]区域: 标题[Title]:{dede:field.title/}_{dede:global.cfg_webname/} 关键词[keywords]:{dede:field.keywords/} 描述[description]:{dede:field.description function='html2text(@me)'/} 织梦首页[Head]区域完整调用标签: {dede:global.cfg_webname/} 织梦列表页[Head]区域完整调用标签: {dede:field.title/}_{dede:global.cfg_webname/} 织梦文章页[Head]区域完整调用标签: {dede:field.title/}_{dede:global.cfg_webname/} 二、织梦网站栏目标题写法:二级栏目_一级栏目_网站名称 {dede:field name='position' runphp='yes'} $tc="_"; //分隔符 $tw=$GLOBALS['cfg_list_symbol']; //调用位置分隔符 @me=html2text(@me); //去除html标签 =split(,@me); //分解成数组 for($ta=(count($tf)-2);$ta>=1;$ta--){ //循环赋值给$tk\.=trim($tf[$ta]).$tc;} $tk=substr($tk,0,-1); @me=$tk; //赋值给@me {/dede:field} _{dede:global name='cfg_webname'/} 三、织梦网站文章标题写法:文章标题_栏目标题(二级栏目_一级栏目)_网站名称 {dede:field name='title'/}_{dede:field name='position' runphp='yes'} $tc="_"; //分隔符 $tw=$GLOBALS['cfg_list_symbol']; //调用位置分隔符 @me=html2text(@me); //去除html标签 =split(,@me); //分解成数组 for($ta=(count($tf)-2);$ta>=1;$ta--){ //循环赋值给$tk\.=trim($tf[$ta]).$tc;} $tk=substr($tk,0,-1); @me=$tk; //赋值给@me {/dede:field} _{dede:global name='cfg_webname'/} 四、织梦网站系统基本配置标签: 1、站点根网址:{dede:global.cfg_basehost/} 2、主页链接:{dede:global.cfg_indexurl/} 3、网站编码:{dede:global.cfg_soft_lang/} 4、CMS版本:{dede:global.cfg_version/} 5、头部调用:{dede:include filename="head.htm"/} 6、网站备案:{dede:global.cfg_beian/} 7、版权信息:{dede:global.cfg_powerby/} 8、网站风格:{dede:global.cfg_templets_skin/} 9、CMS版权:{dede:global.cfg_powerby/} 10、底部调用:{dede:include filename="footer.htm"/} 11、主页链接名称:{dede:global.cfg_indexname/} 12、图片路径:{dede:global.cfg_templets_skin/}/images/ 13、css路径:{dede:global.cfg_templets_skin/}/style/ 五、网站首页常用标签: 1、织梦导航调用标签: 主页 {dede:channel type='top' row='10' currentstyle=" ~typename~"} [field:typename/] {/dede:channel} 2、导航底层模板标签 (01)栏目名称:[field:typename/] (02)栏目链接:[field:typelink/] 3、文章调用标签 {dede:arclist row="5" typeid="1" flag='h' titlelen="32" infolen="5" limit="10"} [[field:typename/]][field:title /] {/dede:arclist} (01)按照发布时间排列:orderby="pubdate" (02)按照点击次数排列:orderby="click" (03)按照最后评论排列:orderby="lastpost" (04)按照文章编号排列:orderby="id" (05)按照随机顺序排列:orderby="rand" (06)按照得分大小排列:orderby="scores" 4、文章常用调用属性标签: (01)头条:h (02)推荐:c (03)图片:p (04)幻灯:f (05)滚动:s (06)跳转:j (07)特荐:a (08)加粗:b 六、织梦网站友情链接标签: 1、文字链接格式: {dede:flink row="24" titlelen=10 linktype="2" type="text" } {dede:flink/} {/dede:flink} 2、图片连接格式 {dede:flink row="24" titlelen=10 linktype="2" type="image" } {dede:flink/} {/dede:flink} 七、文章列表调用标签: 1、常用文章列表调用形式: {dede:list pagesize="10"} [[field:typelink/]][field:title/] {/dede:list} 2、列表页底层模板标签 (01)所属栏目:[field:typelink/] (02)文章标题:[field:title/] (03)文章链接:[field:arcurl/] (04)点击次数:[field:click/] (05)文章描述:[field:description/] (06)缩略图片:[field:picname/] (07)带图链接:[field:imglink/] (08)日期调用:[field:pubdate function="GetDateTimeMK(@me)" /]和[field:pubdate function="MyDate('Y-m-d',@me)"/] (09)软件语言:[field:language/] (10)好评数目:[field:scores/] (11)推荐级别:[field:softrank function='GetRankStar(@me)'/] (12)完整标题:[field:fulltitle/] (13)缩略小图:[field:litpic] (14)原图调用:{dede:field.image/} (15)描述调用:[field:info /] (16)列表标签:{dede:tag row='80' getall='1' sort='month'}[field:tag /] 3、列表页页码分页调用标签: {dede:pagelist istitem="index,pre,next,end,option,info," listsize="5"/} 八、织梦内容页调用标签: 1、文章模型内容页标签: (01)文章标题:{dede:field.title/} (02)文章链接:{dede:field name='arcurl'/} (03)发布时间:{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/} (04)文章来源:{dede:field.source/} (05)文章作者:{dede:field.writer/} (06)责任编辑:{dede:adminname/} (07)文章简介:{dede:field.description} (08)正文内容:{dede:field.body/} (09)当前栏目:{dede:field name='typename'/} (10)单页内容:{dede:field.content/} (11)文章标签:{dede:tag type='current'/}或{dede:tag row='30' sort='new' getall='0'} [field:tag /]{/dede:tag} (12)点击次数: 2、图片模型内容页标签 (01)图片列表开始:{dede:productimagelist} (02)图片列表结束:{/dede:productimagelist} (03)图片显示:[field:imgsrc/] (04)图片链接:javascript:ChangePic('[field:imgsrc/]', '#bigpicimg'); (05)图集缩略图:{dede:field name='image'/} (06)图片标题:[field:text/] 3、下载模型内容页标签 (01)软件类型:{dede:field.softtype/} (02)授权方式:{dede:field.accredit/} (03)界面语言:{dede:field.language/} (04)软件大小:{dede:field.softsize/} (05)文件类型:{dede:field.filetype/} (06)运行环境:{dede:field.os/} (07)软件等级:{dede:field.softrank function='GetRankStar(@me)'/} (08)发布时间:{dede:field.pubdate function="GetDateMk('@me')"/} (09)官方网址:{dede:field.officialurl/} (10)演示地址:{dede:field.officialdemo/} (11)下载次数:{dede:field.officialdemo/} (12)软件图片:{dede:field name='image'/} (13)下载地址:{dede:field name='softlinks'/} (14)软件介绍:{dede:field.introduce/} (15)下载说明:{dede:softmsg/} 4、文章页通用标签: (01)当前位置:{dede:field name='position'/} (02)上一页:{dede:prenext get='pre'/} (03)下一页:{dede:prenext get='next'/} (04)收藏:收藏 (05)挑错:挑错 (06)推荐:推荐 (07)打印:打印 九、织梦CMS经典SQL调用标签代码 1、共有文章:*篇:{dede:sql sql="select count(*) as c from dede_archives where channel=1"}共有文章:[field:c /]篇{/dede:sql} 2、共有图集:*个:{dede:sql sql="select count(*) as c from dede_archives where channel=2"}共有图集:[field:c /]个{/dede:sql} 3、共有软件:*个:{dede:sql sql="select count(*) as c from dede_archives where channel=3"}共有软件:[field:c /]个{/dede:sql} 4、共有评论:*条:{dede:sql sql="select count(*) as c from dede_feedback"}共有评论:[field:c /]条{/dede:sql} 5、共有会员:*名:{dede:sql sql="select count(mid) as c from dede_member"}共有会员:[field:c /]名{/dede:sql} 6、今日更新:*篇:{dede:sql sql="SELECT count( * ) AS c FROM dede_archives WHERE pubdate > UNIX_TIMESTAMP( CURDATE( ) ) "}今日更新:[field:c /]篇{/dede:sql} 7、总共留言:*条:总共留言:{dede:sql sql="select count(*) as cc From dede_guestbook"}[field:cc/]{/dede:sql}条 8、文章阅读:*人:{dede:sql sql="select sum(click) as c from dede_archives"}文章阅读:[field:c /]人次{/dede:sql} 十、首页调用指定栏目的子栏目: {dede:channel type='sun' typeid='栏目ID'} [field:typename/] {/dede:channel}
2024年-5月-5日
1448 阅读
0 评论
未分类
2024-5-5
API接口几种安全验证方法
API接口几种安全验证方法 如何保证数据的安全 方式一:简单的密文传输 特点:(1)服务端和客户端先约定好加密算法,加密密钥;(2)客户端,传输前用约定好的密钥加密;(3)传输密文;(4)服务端,收到消息后用约定好的密钥解密; 黑客定理:客户端是不安全的,属于黑客本地范畴,能被逆向工程。 方式二:一人一密,服务端生成密钥 特点:(1)客户端和服务端提前约定好加密算法,在传递消息前,先协商密钥;(2)客户端,请求密钥;(3)服务端,返回密钥;(4)然后用协商密钥加密消息,传输密文; 黑客定理: (1)网上传输的内容是不安全的,黑客能得到加密key=X;(2)客户端和服务端提前约定的加密算法是不安全的,黑客能得到加密算法;(3)黑客截取后续传递的密文,可以用对应的算法和密钥解密; 应该如何优化呢?根本上,密钥不能在网络上直接传输。 方法三:根据用户特性一人一密,密钥不再传输 特点:(1)协商的密钥无需在网络传输;(2)使用“具备用户特性的东西”作为加密密钥,例如:用户密码的散列值;(3)一人一密,每个人的密钥不同;(4)然后密钥加密消息,传输密文;(5)服务端从db里获取这个“具备用户特性的东西”,解密; 黑客定理三:用户客户端内存是安全的,属于黑客远端范畴,认为是安全的。
2024年-5月-5日
1665 阅读
0 评论
未分类
2024-5-5
迅雷云加速开放平台接口
全局接口 接口名称 功能说明 XL_Init 初始化SDK,并使其为处理后续操作做好准备。 XL_UnInit 反初始化SDK,释放模块运行期间申请的资源。 XL_DelTempFile 删除临时文件 XL_SetSpeedLimit 设置最大下载速度 XL_SetProxy 设置全局代理 XL_SetUserAgent 设置HTTP请求时客户端信息 XL_ParseThunderPrivateUrl 将迅雷专用链转成实际URL XL_SetUploadSpeedLimit 限制上传速度 XL_CreateTaskByURL 简单封装了XL_CreateTask接口 XL_CreateTaskByThunder 拉起迅雷7创建下载任务 XL_ForceStopTask 强制暂停任务 任务接口 接口名称 功能说明 XL_CreateTask 创建任务 XL_DeleteTask 销毁任务 XL_StartTask 开始任务 XL_StopTask 停止任务 XL_QueryTaskInfoEx 查询任务信息 接口详细说明 XL_Init BOOLXL_Init(void) 初始化下载引擎,并使其为处理后续操作做好准备。 返回值:TRUE表示成功,FALSE表示失败。一些特殊情况会导致初始化失败,如:二进制文件缺失。 说明:该接口必须与XL_Unint(void)成对出现。调用该接口的时,xldl.dll会拉起MiniThunderPlatform.exe子进程。 XL_UnInit BOOL XL_UnInit(void) 反初始化下载引擎,释放模块运行期间申请的资源。 返回值:TRUE表示成功,FALSE表示失败。 说明:调用该接口后,会通知MiniThunderPlatform.exe子进程退出。 XL_CreateTask HANDLE XL_CreateTask(DownTaskParam &stParam) 创建任务。可以新建任务也可以续传任务,参数中IsResume用于表示任务是否是续传任务。其他信息请参考DownTaskParam的定义。 参数: [in] stParam,创建任务需要的参数。 DownTaskParam参考: struct DownTaskParam { int nReserved1; TCHAR szTaskUrl[2084]; // 任务URL,支持http,https,ftp,ftps格式 TCHAR szRefUrl[2084]; // 可空,HTTP下载所在的网页URL TCHAR szCookies[4096]; // 可空,浏览器cookie TCHAR szFilename[MAX_PATH]; // 下载保存文件名. TCHAR szReserved[MAX_PATH]; TCHAR szSavePath[MAX_PATH]; // 文件保存目录 HWND hReserved; BOOL bReserved1; TCHAR szReserved1[64]; TCHAR szReserved2[64]; BOOL IsOnlyOriginal; //是否只从原始地址下载 UINT nReserved2; BOOL bReserved2; BOOL IsResume; // 是否用续传 DWORD reserved[2048]; } 返回值:返回任务的句柄。 说明:任务创建后,是不会马上就下载的,需要调用XL_StartTask。异步执行。 XL_DeleteTask BOOL XL_DeleteTask(HANDLE hTask) 销毁任务,释放任务在运行期间申请的资源。 参数: [in]hTask,任务句柄 返回值:TRUE表示成功,FALSE表示失败。当任务不存在时,调用会失败。 说明:在任务暂停、成功以及删除任务的时候都需要调用该接口,保证资源尽快的释放。 异步执行,如果任务出于pending状态则不能调用该接口。 XL_StartTask BOOL XL_StartTask(HANDLE hTask); 开始下载。任务创建成功后,不会马上开始下载,需调用此接口才会开始下载。 参数: [in]hTask,任务句柄 返回值:TRUE表示成功,FALSE表示失败。当任务不存在时,调用会失败。 说明:异步执行,如果任务出于pending状态则不能调用该接口。 XL_StopTask BOOL XL_StopTask(HANDLE hTask) 停止下载 参数: [in]hTask,任务句柄 返回值:TRUE表示成功,FALSE表示失败。当任务不存在时,调用会失败。 说明:获取任务信息是使用轮询方式的,最终任务下载了多少数据在任务停止下载后查询才是正确的。调用后任务不会立即停止,需轮询到任务状态为PAUSE之后,才能获取到。 XL_QueryTaskInfoEx BOOL XL_QueryTaskInfoEx(HANDLE hTask, DownTaskInfo & stTaskInfo); 查询任务当前信息。 参数: [in]hTask,任务句柄 [out] stTaskInfo, 任务信息。 DownTaskInfo参考: struct DownTaskInfo { DOWN_TASK_STATUS stat; //任务状态 TASK_ERROR_TYPE fail_code; //错误码 TCHAR szFilename[MAX_PATH]; //文件名 TCHAR szReserved[MAX_PATH]; __int64 nTotalSize; // 该任务总大小(字节) __int64 nTotalDownload; // 下载有效字节数(可能存在回退的情况) float fPercent; // 下载进度 int nTotalTime; // 不提供该值 int nSrcTotal; // 总资源数 int nSrcUsing; // 可用资源数 int nReserved1; int nReserved2; int nReserved3; int nReserved; __int64 nTotalUpload; // 现不提供该值 __int64 nDonationP2P; // p2p资源贡献的数据长度 __int64 nReserved4; __int64 nDonationOrgin; // 原始资源贡献的数据长度 __int64 nDonationP2S; // 镜像资源贡献的数据长度 __int64 nReserved5; __int64 nReserved6; int nSpeed; // 速度(字节/秒) int nSpeedP2S; // 加速服务器资源的下载速度 int nSpeedP2P; // peer下载速度 bool IsOriginUsable; // 原始资源是否可用 float fReserved; int bReserved; DWORD reserved[64]; }; enum DOWN_TASK_STATUS { NOITEM = 0, TSC_ERROR, TSC_PAUSE, TSC_DOWNLOAD, TSC_COMPLETE, TSC_STARTPENDING, TSC_STOPPENDING }; enum TASK_ERROR_TYPE { TASK_ERROR_UNKNOWN = 0x00, // 未知错误 TASK_ERROR_DISK_CREATE = 0x01, // 创建文件失败 TASK_ERROR_DISK_WRITE = 0x02, // 写文件失败 TASK_ERROR_DISK_READ = 0x03, // 读文件失败 TASK_ERROR_DISK_RENAME = 0x04, // 重命名失败 TASK_ERROR_DISK_PIECEHASH = 0x05, // 文件片校验失败 TASK_ERROR_DISK_FILEHASH = 0x06, // 文件全文校验失败 TASK_ERROR_DISK_DELETE = 0x07, // 删除文件失败失败 TASK_ERROR_DOWN_INVALID = 0x10, // 无效的DOWN地址 TASK_ERROR_PROXY_AUTH_TYPE_UNKOWN = 0x20, // 代理类型未知 TASK_ERROR_PROXY_AUTH_TYPE_FAILED = 0x21, // 代理认证失败 TASK_ERROR_HTTPMGR_NOT_IP = 0x30, // http下载中无ip可用 TASK_ERROR_TIMEOUT = 0x40, // 任务超时 TASK_ERROR_CANCEL = 0x41, // 任务取消 TASK_ERROR_TP_CRASHED= 0x42, // MINITP崩溃 TASK_ERROR_ID_INVALID = 0x43, // TaskId 非法 }; 返回值:TRUE表示成功,FALSE表示失败。 说明:IsOriginUsable,原始资源是否可用,是一个布尔型的参数,但是原始连接原始资源是一个耗时的操作,意味着中间有段时间原始资源是否有效是未知的。这个参数的初始态是false,所以就存在原始资源是有效,但在任务刚开始时这个参数是false的问题。上层在使用该值的时候需要根据业务逻辑再做处理。 XL_DelTempFile BOOL XL_DelTempFile(DownTaskParam &stParam) 删除任务的临时文件。下载引擎会创建 .td 、 .td.cfg后缀的文件用来保存已下载的数据。 参数: [in]stParam,任务参数,参考创建任务中的参数。但是这里只有文件保存的目录和文件名是必须。 返回值:TRUE表示成功,FALSE表示失败。 说明:文件名是最后真正保存到磁盘的文件名,不带临时文件后缀名。最终保存的文件名会和创建任务不一样,所以这个文件名要以查询任务信息返回的文件名为准。在保存路径下已经存在相同文件名的文件时,最终保存的文件名就会自动改变文件名:filename.zip → filename(1).zip。 异步执行。 XL_SetSpeedLimit void XL_SetSpeedLimit(INT32 nKBps) 设置最大下载速度。 参数: [in]nKBps, 速度上限值 说明:异步执行 XL_SetProxy BOOL XL_SetProxy(DOWN_PROXY_INFO &stProxyInfo) 设置下载代理,全局任务代理信息。 参数: [in]stProxyIfno 代理信息 DOWN_PROXY_INFO参考: enum DOWN_PROXY_TYPE { PROXY_TYPE_IE = 0, PROXY_TYPE_HTTP = 1, PROXY_TYPE_RESERVED= 2, //不支持该代理 PROXY_TYPE_SOCK5 = 3, PROXY_TYPE_UNKOWN = 255, }; enum DOWN_PROXY_AUTH_TYPE { PROXY_AUTH_NONE =0, PROXY_AUTH_AUTO, PROXY_AUTH_BASE64, PROXY_AUTH_NTLM, PROXY_AUTH_DEGEST, PROXY_AUTH_UNKOWN, }; struct DOWN_PROXY_INFO { BOOL bIEProxy; BOOL bProxy; DOWN_PROXY_TYPE stPType; DOWN_PROXY_AUTH_TYPE stResverd; TCHAR szHost[2048]; INT32 nPort; TCHAR szUser[50]; TCHAR szPwd[50]; TCHAR szDomain[2048]; }; 返回值:TRUE表示成功,FALSE表示失败。参数非法返回FALSE XL_SetUserAgent void XL_SetUserAgent(const TCHAR *pszUserAgent) 设置向原始资源的Http任务请求的UserAgent。 参数: [in]pszUserAgent,客户端UserAgent字符串 说明:在调用该方法后创建的任务的才会使用新的UserAgent。 XL_ParseThunderPrivateUrl BOOL XL_ParseThunderPrivateUrl(const wchar_t *pszThunderUrl, wchar_t *normalUrlBuffer, INT32 bufferLen) 迅雷专用链是根据一定逻辑从普通URL转成的。 参数: [in] pszThunderUrl,迅雷专用链URL [out] normalUrlBuffer,存储转化后的普通URL的缓冲区 [out] bufferLen,normalUrlBuffer的缓冲区大小,单位字符数 返回值:TRUE表示成功,FALSE表示失败 说明:此函数功能独立,和其他函数没有依赖关系,可随时单独使用 XL_SetUploadSpeedLimit void XL_SetUploadSpeedLimit(INT32 nTcpKBps, INT32 nOtherKBps) 可根据实际情况设置外网和内网的上传速度。 参数: [in] nTcpKBps, 内网上传速度,单位为KB/s [in] nOtherKBps, 外网上传速度,单位为KB/s 返回值:无 XL_CreateTaskByURL HANDLE XL_CreateTaskByURL(const wchar_t *url, const wchar_t *path, const wchar_t *fileName, BOOL IsResume) 通过任务URL、路径、文件名创建任务。 参数: [in] url, 任务URL,不能为空,包括空字符字符长度不能超过2084 [in] path, 任务路径,不能为空,包括空字符字符长度不能超过260 [in] fileName, 任务文件名,不能为空,包括空字符字符长度不能超过260 [in] IsResume, 是否是续传任务 返回值:返回任务的句柄 XL_CreateTaskByThunder LONG XL_CreateTaskByThunder(wchar_t *pszUrl, wchar_t *pszFileName, wchar_t *pszReferUrl, wchar_t *pszCharSet, wchar_t *pszCookie) 通过传递URL和文件名等信息拉起迅雷7的新建面板创建下载任务。 参数: [in] pszUrl,任务URL [in] pszFileName,下载保存的文件名 [in] pszReferUrl,引用页URL [in] pszCharSet,当前网页的字符集 [in] pszCookie,下载数据所需的cookie 返回值:0成功,其他为失败 XL_ForceStopTask BOOL XL_ForceStopTask(HANDLE hTask) 强制暂停任务 参数: [in] hTask,任务句柄 返回值:TRUE表示成功,FALSE表示失败。当任务不存在时,调用会失败 说明:在开启UAC下载大文件时,调用XL_StopTask可能需要消耗比较长的时间。这种情况下如果需要快速暂停任务,可以调用XL_ForceStopTask,不过有可能导致已经下载的还没写到磁盘的数据丢失。 注意事项 1.全局接口是线程不安全的,且XL_Init外的其他接口必须在该函数成功返回后才能调用; 2.如果任务处于TSC_STARTPENDING或TSC_STOPPENDING,关于任务的操作只能调用查询任务信息的接口。 接口逻辑说明 任务异步操作 任务的操作是异步执行的。调用接口有两个操作: 1.操作上层xldl.dll中的虚任务 2.在命令队列对push一条相关操作的命令 接口层可以操作的任务都是虚任务,真实任务是在MiniThunderPlatfom进程创建的。任务创建的流程: 1.Xldl创建虚任务; 2.将操作与参数push到命令队列; 3.命令处理线程负责执行队列中的命令,与MiniThunderPlatfom同步通信; 4.MiniThunderPlatfom创建任务成功后,虚任务就可以和实任务映射。 之后所有对virtual task 的操作都将映射到真正的task,并在MiniTP执行真正的操作。 任务信息查询,任务信息的更新需要调用者驱动,需要调用者每隔1s调用一次该接口。任务信息查询和更新的流程: 1.调用接口查询信息时,先从虚任务查询任务信息,第一次调用的时候肯定没有信息 2.将查询操作与参数push到命令队列; 3.命令处理线程负责执行队列中的命令,与MiniThunderPlatfom同步通信; 4.查询到真实任务信息后,将信息存储到虚任务中; 5.第二次查询就可以直接查询到任务信息,这些信息是上一次查询到的。 这里就会出现这样的情况,第一次查询操作不能获取到任务信息,即任务处于pause/start_pending状态中。更极端的情况,任务下载完成前一次查询没有调用过,在任务完成后再调用该接口会发现任务进度为0。 子进程异常退出 这种情况是不被欢迎的,但又不可避免。子进程异常退出后MiniThunderPlatfom创建的任务会销毁。这样,虚任务除了与真实任务的映射关系,其实并无意义。这时候,查询任务信息就会返回任务出错,错误码为TASK_ERROR_ID_INVALID(任务id非法)。这时需要重新创建续传任务,接口为XL_CreateTask,结构体中其他参数与创建普通任务相同,参数IsResume设为TRUE。 其它 SDK文件说明 Sdk总共有10个二进制文件。二进制文件之间的依赖关系如下图所示: 各个文件功能介绍: 文件名 功能 xldl.dll 导出MiniTP接口 MiniThunderPlatform.exe 独立进程 download_engine.dll MiniTP核心库 zlib1.dll 压缩通信数据 dl_peer_id.dll 获取迅雷客户端标识 XLBugReport.exe 负责上报捕获到的崩溃 XLBugHandler.dll 负责拉起XLBugReport .exe minizip.dll、mini_unzip.dll 用于压缩文件崩溃堆栈 atl71.dll 微软提供的程序库
2024年-5月-5日
774 阅读
0 评论
未分类
1
2
3
4