EEfaq论坛-赚客自留地

 找回密码
 免费注册
查看: 618|回复: 15

关于通过Mysql语句发布文章选择Category问题

  [复制链接]
发表于 2013-12-3 15:22:35 | 显示全部楼层 |阅读模式
通过wp-admin后台或者Windows Live Write发布文章仍然麻烦,于是自己使用PHP程序直接将文章插入到网站数据库中,这样的话数据写入速度要快N倍,适合大量文章发布或多站同时维护。但WP程序的数据库文章表wp-posts和Category关系表是分开的,有没有这样做过的,怎么在插入文章的同时,选择所属的分类。


发表于 2013-12-3 15:42:52 | 显示全部楼层
在wp_term_relationships表插入之前文章的ID(mysql_insert_id)以及类别ID
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-3 15:47:50 | 显示全部楼层
本帖最后由 Seanhere 于 2013-12-3 15:50 编辑

是的,要先读取已发布文章的ID,并且还要知道该ID代表文章所属category,才能作此操作,量大之后挺麻烦的


回复 支持 反对

使用道具 举报

发表于 2013-12-3 17:01:07 | 显示全部楼层
先读取id,然后同时写2条sql分别插入2个表,这个不难吧

你可以把写好的代码放上来,我帮你改
回复 支持 反对

使用道具 举报

发表于 2013-12-3 19:23:03 | 显示全部楼层
共享一下吧,最近好像也有这个需要.
回复 支持 反对

使用道具 举报

发表于 2013-12-3 21:08:18 | 显示全部楼层
同求一个啊,这个是主要功能速度会提高很多
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-3 21:33:57 | 显示全部楼层
本帖最后由 Seanhere 于 2013-12-3 21:52 编辑

这个方法是用来更新用来做外链的站群的,站群定期更新。由于站群量越来越大,更新一遍很费时间,但又不愿买市场上的站群软件。所以才想出了这种方法。
自己虽有一些编程基础,但没学过php,是边查语法边写的,程序可能有些笨拙,高手不要见笑。
  1. <?php
  2. //数据库参数
  3. $dbuser='';
  4. $dbpwd='';
  5. $dbname='';
  6. $dbhost=';
  7. $dbtable='';

  8. //设置读取路径
  9. $rdcontent='xxxx.txt';
  10. $rdtitle='xxxxtitle.txt';
  11. $rdlink='xxxxlink.txt';

  12. //读取插入链接,并设置发布概率
  13. function gen_link($rdlink){
  14.         $data2 = file($rdlink);
  15.         $num2 = count($data2);
  16.         $id2= mt_rand(0,$num2-1);
  17.         $random= mt_rand(0,10);
  18.         if($random<5)
  19.                 $link= trim($data2[$id2]);
  20.         else
  21.                 $link="";
  22.         return $link;
  23. }

  24. //生成文章
  25. $str = "";
  26. $title = "";

  27. $data2 = file($rdtitle);
  28. $num2 = count($data2);
  29. $id2 = mt_rand(0,$num2-1);
  30. $title = $data2[$id2];

  31. $data = file($rdcontent);
  32. $num = count($data);

  33. for($i=0;$i<25;$i++){
  34.         $temp=" ";
  35.         if(($i%5)==0)
  36.                 $temp="
  37. \n";
  38.         elseif(($i==7)|($i==21)){
  39.                 $links=gen_link($rdlink);
  40.                 $str=$str." ".$links." ";
  41.         }
  42.         $id = mt_rand(0, $num-1);
  43.         $line = trim($data[$id]);
  44.         $str=$str.$temp.$line;
  45. }

  46. //生成slug
  47. function generate_slug($len){
  48.         $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  49.         $slug="";
  50.         for($j=0;$j<$len;$j++){
  51.                 $slug .= $chars[ mt_rand(0, strlen($chars) - 1) ];
  52.         }
  53.         return $slug;
  54. }
  55. $slug = generate_slug(17);

  56. //获取发布时间
  57. $datetime= date("Y-m-d H:i:s");

  58. $sql= "INSERT INTO `$dbtable` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES (NULL, '1', '$datetime', '$datetime','$str','$title', '', 'publish', 'open', 'open', '', '$slug', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0', '', '0', 'post', '', '0')";

  59. //连接数据库并处理数据
  60. $con = mysql_connect($dbhost,$dbuser,$dbpwd);
  61. if(!$con){
  62.         die('Failed to connect to database! '.mysql_error());
  63. }else
  64.         echo "Suscess to connect to database!
  65. \n";

  66. mysql_select_db($dbname,$con);

  67. $result=mysql_query($sql);

  68. mysql_close($con);

  69. if(!$result){
  70.         echo $result;
  71.         die('Failed to post article! '.mysql_error());
  72. }else
  73.         echo "Suscess to post article!\n";

  74. echo $dbname." is done";

  75. ?>
复制代码
文章插入到wp-posts表中,文章id自动生成,在插入时是未知的,所以就在插入文章的同时无法再将id 插入到wp_term_relationship , 这样的结果是发布的文章是无分类的。所以不太明白关于“读取id”的方法,请指教。

文章的slug我用了随机生成的方法,其实最好的方法应该是用文章标题来转化,但那样麻烦些懒得费事。文章作者默认为1,就是管理员。文章内容我用了Yoo版的方法:http://www.advertcn.com/thread-12629-1-1.html。能保证原创性,但损失了可读性,由于是做外链用的,应该关系不大。

如果想将文件夹下的文章随机发布的话,可以先将文件夹内文件遍历,然后随机抽取发布的方法。
这样做成php页面,某站目录下,使用VPS的Crontab 用curl语法定时向该url发出请求,就可自动发布一篇文章,如果想要多篇的话,可以使用循环。




回复 支持 反对

使用道具 举报

发表于 2013-12-3 22:37:54 | 显示全部楼层

  1. <?php
  2. //数据库参数
  3. $$dbuser='';
  4. $$dbpwd='';
  5. $$dbname='';
  6. $$dbhost='';
  7. $$dbtable='';

  8. //设置读取路径
  9. $$rdcontent='xxxx.txt';
  10. $$rdtitle='xxxxtitle.txt';
  11. $$rdlink='xxxxlink.txt';

  12. //读取插入链接,并设置发布概率
  13. function gen_link($$rdlink){
  14.         $$data2 = file($$rdlink);
  15.         $$num2 = count($$data2);
  16.         $$id2= mt_rand(0,$$num2-1);
  17.         $$random= mt_rand(0,10);
  18.         if($$random<5)
  19.                 $$link= trim($$data2[$$id2]);
  20.         else
  21.                 $$link="";
  22.         return $$link;
  23. }

  24. //生成文章
  25. $$str = "";
  26. $$title = "";

  27. $$data2 = file($$rdtitle);
  28. $$num2 = count($$data2);
  29. $$id2 = mt_rand(0,$$num2-1);
  30. $$title = $$data2[$$id2];

  31. $$data = file($$rdcontent);
  32. $$num = count($$data);

  33. for($$i=0;$$i<25;$$i++){
  34.         $$temp=" ";
  35.         if(($$i%5)==0)
  36.                 $$temp="
  37. \n";
  38.         elseif(($$i==7)|($$i==21)){
  39.                 $$links=gen_link($$rdlink);
  40.                 $$str=$$str." ".$$links." ";
  41.         }
  42.         $$id = mt_rand(0, $$num-1);
  43.         $$line = trim($$data[$$id]);
  44.         $$str=$$str.$$temp.$$line;
  45. }

  46. //生成slug
  47. function generate_slug($$len){
  48.         $$chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  49.         $$slug="";
  50.         for($$j=0;$$j<$$len;$$j++){
  51.                 $$slug .= $$chars[ mt_rand(0, strlen($$chars) - 1) ];
  52.         }
  53.         return $$slug;
  54. }
  55. $$slug = generate_slug(17);

  56. //获取发布时间
  57. $$datetime= date("Y-m-d H:i:s");

  58. $$sql= "INSERT INTO `$$dbtable` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES (NULL, '1', '$$datetime', '$$datetime','$$str','$$title', '', 'publish', 'open', 'open', '', '$$slug', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0', '', '0', 'post', '', '0')";

  59. //连接数据库并处理数据
  60. $$con = mysql_connect($$dbhost,$$dbuser,$$dbpwd);
  61. if(!$$con){
  62.         die('Failed to connect to database! '.mysql_error());
  63. }else
  64.         echo "Suscess to connect to database!
  65. \n";

  66. mysql_select_db($$dbname,$$con);

  67. $$result=mysql_query($$sql);


  68. //前面已经插入,获取插入id
  69. $$insert_id = mysql_insert_id();

  70. //继续插入wp_term_relationship表
  71. if($$insert_id > 0 ){
  72.         $$sql= "INSERT INTO `$$dbtable` (`object_id`, `term_taxonomy_id`, `term_order`) VALUES (NULL, '$$insert_id', NULL)";

  73.         $$result=mysql_query($$sql);
  74. }
  75. //关闭数据库连接
  76. mysql_close($$con);



  77. if(!$$result){
  78.         echo $$result;
  79.         die('Failed to post article! '.mysql_error());
  80. }else
  81.         echo "Suscess to post article!\n";

  82. echo $$dbname." is done";

  83. ?>




复制代码
代码给你改了下,wp_term_relationship表插入的值,你应该还需要改一下,因为我已经忘了这几个表的关系了,剩下你的分享很好,我们一般使用付费cronjob,因为这种东西稳定性很重要,可以搜索setcronjob


如果你需要第1次插入的某些值,你需要在if($insert_id > 0 )下面再增加一个select的查询
前面既然都是插入的内容,那么插入的内容事先就已经知道的,所以没有必要做这个select查询

评分

参与人数 1e币 +4 收起 理由
hudba + 4 admire;)

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-12-4 08:41:01 | 显示全部楼层
我之前是使用wp内容函数搞定的,效率比直接插sql慢些,但胜在稳定,基本不出问题
回复 支持 反对

使用道具 举报

发表于 2013-12-4 09:32:15 | 显示全部楼层
你可以分两步来处理,先插入文章,再导出文章ID,更新目录.
你可以查看mysql那几个常用的指令。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-4 13:14:08 | 显示全部楼层
月光飞燕 发表于 2013-12-3 22:37
代码给你改了下,wp_term_relationship表插入的值,你应该还需要改一下,因为我已经忘了这几个表的关系了, ...

多谢,知道怎么做了。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-4 13:16:04 | 显示全部楼层
风吹不动 发表于 2013-12-4 08:41
我之前是使用wp内容函数搞定的,效率比直接插sql慢些,但胜在稳定,基本不出问题
...

有空细要了解一下wp内容函数,多谢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-4 13:18:38 | 显示全部楼层
yiyunet 发表于 2013-12-4 09:32
你可以分两步来处理,先插入文章,再导出文章ID,更新目录.
你可以查看mysql那几个常用的指令。

嗯,回头再学习一下。

回复 支持 反对

使用道具 举报

发表于 2013-12-5 12:40:52 | 显示全部楼层
本帖最后由 ralf07 于 2013-12-5 12:41 编辑

用WORDPRESS的XMLRPC啊,这个好方便
category,tag都可以插进去的
回复 支持 反对

使用道具 举报

发表于 2013-12-5 12:44:02 | 显示全部楼层
自来大家都是程序员啊;我想学PHP,不知道有哪些好的入门教程?
回复 支持 反对

使用道具 举报

发表于 2013-12-5 12:44:34 | 显示全部楼层
sorry, 笔误,看来。                                                                                                      
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|联系我们|Archiver|手机版|小黑屋|EEfaq论坛

GMT+8, 2024-11-22 15:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表