过期域名预定抢注

 找回密碼
 免费注册

關於通過Mysql語句發佈文章選擇Category問題

  [複製鏈接]
發表於 2013-12-3 15:22:35 | 顯示全部樓層 |閱讀模式
通過wp-admin後台或者Windows Live Write發佈文章仍然麻煩,於是自己使用PHP程序直接將文章插入到網站數據庫中,這樣的話數據寫入速度要快N倍,適合大量文章發佈或多站同時維護。但WP程序的數據庫文章表wp-posts和Category關係表是分開的,有沒有這樣做過的,怎麼在插入文章的同時,選擇所屬的分類。
7 u7 @3 I0 Q6 D  F) F1 N% F
! h* n, ^. V& ]6 u* ^8 u+ v4 U
; L) v2 Y1 m, @( b7 f# ^
發表於 2013-12-3 15:42:52 | 顯示全部樓層
在wp_term_relationships表插入之前文章的ID(mysql_insert_id)以及類別ID
7 v/ f3 z8 H8 M5 M5 D
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-12-3 15:47:50 | 顯示全部樓層
本帖最後由 Seanhere 於 2013-12-3 15:50 編輯
3 U4 g+ a6 p7 o* t  i; D
mattfox 發表於 2013-12-3 15:42 " w" H* y8 j# D* i
在wp_term_relationships表插入之前文章的ID(mysql_insert_id)以及類別ID
/ U2 g7 u  l$ U' a  v7 Q8 f
是的,要先讀取已發佈文章的ID,並且還要知道該ID代表文章所屬category,才能作此操作,量大之後挺麻煩的
% s+ C9 ]6 q3 Z( J- R' L; b( }# }

7 @" @/ w6 r% p) ^. |7 u+ |
回復 给力 爆菊

使用道具 舉報

發表於 2013-12-3 17:01:07 | 顯示全部樓層
先讀取id,然後同時寫2條sql分別插入2個表,這個不難吧
& t, c& q! P$ R. @6 \+ |$ y5 t3 M; ?
你可以把寫好的代碼放上來,我幫你改$ K* {  T, b) `* R
回復 给力 爆菊

使用道具 舉報

發表於 2013-12-3 19:23:03 | 顯示全部樓層
共享一下吧,最近好像也有這個需要.  X. M4 D9 u# G( Y, d
回復 给力 爆菊

使用道具 舉報

發表於 2013-12-3 21:08:18 | 顯示全部樓層
同求一個啊,這個是主要功能速度會提高很多9 v; I0 V) }& M3 z! a; f" n8 a/ r
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-12-3 21:33:57 | 顯示全部樓層
本帖最後由 Seanhere 於 2013-12-3 21:52 編輯
% A* o: T; B0 T! v
" }6 _3 ?& k4 h這個方法是用來更新用來做外鏈的站群的,站群定期更新。由於站群量越來越大,更新一遍很費時間,但又不願買市場上的站群軟件。所以才想出了這種方法。
% B1 t# q% z8 ^- b2 u  m( j8 O自己雖有一些編程基礎,但沒學過php,是邊查語法邊寫的,程序可能有些笨拙,高手不要見笑。
  1. <?php
    4 w* t* C9 H9 l
  2. //數據庫參數
    9 K0 W2 P3 S3 q6 J- r" [' D
  3. $dbuser='';
    $ L) s  V9 Z5 M, T$ D& t5 i" P* O
  4. $dbpwd='';
    . f: W9 K; ?6 Q) |. x9 t  j$ [
  5. $dbname='';$ q+ @" ?% }; R; f; K; ^
  6. $dbhost=';
    ! G" w# k6 U$ x0 T5 z
  7. $dbtable='';
    7 O# ]4 d% [6 R, ~

  8. + S3 u* `5 p8 {/ X: ~& G
  9. //設置讀取路徑! b( {' t9 O1 R: x; a* ]2 D8 Q2 s
  10. $rdcontent='xxxx.txt';) W0 y& d2 L4 J3 a' S
  11. $rdtitle='xxxxtitle.txt';
    5 Z! Q. `: d5 V: L8 C
  12. $rdlink='xxxxlink.txt';. O- l4 w% t4 l( A7 h

  13. % T" Z* y2 [$ ^) D, Y: T1 i% r4 a
  14. //讀取插入鏈接,並設置發佈概率0 e- }9 e9 z' s; s
  15. function gen_link($rdlink){
    ! z& f( G  X0 s- l4 t: F/ Y
  16.         $data2 = file($rdlink);7 B' j( |, C, S# N* U6 O
  17.         $num2 = count($data2);7 u; z+ p  Z- }- t
  18.         $id2= mt_rand(0,$num2-1);' F6 w$ D* V/ q5 V! P
  19.         $random= mt_rand(0,10);
    ' u1 L3 @# K, N% l$ Y- c
  20.         if($random<5)
    # R9 _# K9 Z8 e; h4 y0 s9 A! `
  21.                 $link= trim($data2[$id2]);5 s6 T& C* p' |8 v- A  l& H
  22.         else. o- \, I+ m) _* p( n5 }( N! ~0 D
  23.                 $link="";
    ) Q, |/ M% d" N7 {6 Z/ i
  24.         return $link;
    " @1 f4 @0 u! I! r- j4 f- H
  25. }  X- C4 U3 t# J. v

  26. 5 X1 L  s$ Z9 H, ]
  27. //生成文章
    " I$ I4 H* `- ]- x
  28. $str = "";
    0 C- R9 M6 |2 d" a3 T  Y
  29. $title = "";
    2 p7 L3 w( e) g. O) P2 U
  30. . g+ Y; c9 D' ]! U  m% G* x
  31. $data2 = file($rdtitle);  a- h! {2 [! M
  32. $num2 = count($data2);
    : g4 {1 e% v3 {0 b& j8 T
  33. $id2 = mt_rand(0,$num2-1);
    & V* d" I& Y9 t* {
  34. $title = $data2[$id2];! _) C' A( A' v, a1 R' V$ [! \' ?
  35. ! ]/ C* T% h; x* D2 T+ o" O; F
  36. $data = file($rdcontent);; m* ?- B4 t2 A  h
  37. $num = count($data);
    $ B3 P" m; M+ Y1 ^

  38. 4 r  J& H5 I/ G
  39. for($i=0;$i<25;$i++){/ v: d  g# s4 l1 Y
  40.         $temp=" ";
      S1 }/ U- V$ U& Q! ?
  41.         if(($i%5)==0)
    9 v8 \- u: Z; y% f5 ?. w
  42.                 $temp="% Z7 a( h- ~+ g  z8 d
  43. \n";
    6 i, q+ a3 L/ r4 u5 J4 H
  44.         elseif(($i==7)|($i==21)){
    1 F) }" _+ f% `4 S( H2 {# N# d
  45.                 $links=gen_link($rdlink);
    8 ~6 J! P2 G% t/ g1 B) d+ P* o, }0 s
  46.                 $str=$str." ".$links." ";* x+ |, o: j- y$ r, F* e
  47.         }# \( \- e0 r: d% X) ^+ h4 a
  48.         $id = mt_rand(0, $num-1);4 ?# r: Q* ^, m6 I
  49.         $line = trim($data[$id]);8 p) \( R( H# u6 ^! W& v/ Z  G
  50.         $str=$str.$temp.$line;
    . p) q5 @# m' w
  51. }
    ! S/ Y  ~: f, [) _

  52. : b( _) ]- F6 T0 B
  53. //生成slug7 f) q) K( x" l& I+ L- \
  54. function generate_slug($len){
    1 O3 d$ @! V# P# ?% t( ^2 t: p
  55.         $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';- J* I* H# W1 `' f! Q
  56.         $slug="";
    * u) s1 H, q. w
  57.         for($j=0;$j<$len;$j++){6 \  U1 x, R: H" b- b1 p
  58.                 $slug .= $chars[ mt_rand(0, strlen($chars) - 1) ];1 I0 R" Y$ ^( C& z% C( g2 b
  59.         }* R8 a) s* y/ O- H$ I2 ^7 L
  60.         return $slug;/ C" d- P+ O$ J5 q% c/ i) p( U* Z
  61. }; G' @) Z% {- \/ I. h% R4 u' p* ~% K
  62. $slug = generate_slug(17);" Q% q2 ]1 E1 D( @8 p- ?- \

  63. " G, Y+ O0 t: t  W6 @& b7 A
  64. //獲取發佈時間
    1 d% E, x% j% |, O0 o0 Y
  65. $datetime= date("Y-m-d H:i:s");
    7 P3 E* T9 x- \1 ^8 Q

  66.   ?. M* N* V6 H% O9 V9 c
  67. $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')";
    5 E7 d* }6 c* V# s, ~

  68. * S# {! W+ X1 H4 X$ [3 V
  69. //連接數據庫並處理數據
    3 Z, R* f+ h  B$ @0 L( a  f2 [$ E
  70. $con = mysql_connect($dbhost,$dbuser,$dbpwd);
    9 ?* a6 ]$ `& k: M( g* a
  71. if(!$con){; @4 e1 z* D& U5 |
  72.         die('Failed to connect to database! '.mysql_error());
    " o. ]0 E' ?1 Y! g5 Z! L
  73. }else) e) j4 I& E4 `- }) i! i
  74.         echo "Suscess to connect to database!) A6 t0 M$ Y1 B2 U  g
  75. \n";
    7 l' d2 E# \, M. {& \" g. }7 V

  76. * T5 A9 z0 N$ A; d2 k1 W1 A+ D
  77. mysql_select_db($dbname,$con);
    : x) Y& _( `4 B3 b* ~6 F. f9 S% y
  78. ) u0 L, f; ]& A) H
  79. $result=mysql_query($sql);. @+ L1 Z6 L" S6 e5 i/ P
  80. 4 z% E+ @" W: o* q7 n  P& Y+ S
  81. mysql_close($con);1 V* z( w  ^% {. g3 }; X
  82. ' O6 d5 |4 a7 g$ J) X2 T
  83. if(!$result){2 E8 ^/ v5 R! f  v4 P' l
  84.         echo $result;
    : F0 a5 R: f9 o( Y) G% K8 ^1 m6 D
  85.         die('Failed to post article! '.mysql_error());( T$ T6 ~) Y& i( p  `$ ~
  86. }else
    - L7 O8 u6 h; u+ h/ j
  87.         echo "Suscess to post article!\n";) q' U/ @% @9 f
  88. % o$ y" k2 B& g! g) e8 X
  89. echo $dbname." is done";% G) N; X$ s) V/ }5 L' t6 K( l  V2 n; S
  90.   Z  w4 b5 i. n
  91. ?>
複製代碼
文章插入到wp-posts表中,文章id自動生成,在插入時是未知的,所以就在插入文章的同時無法再將id 插入到wp_term_relationship , 這樣的結果是發佈的文章是無分類的。所以不太明白關於「讀取id」的方法,請指教。5 v- ]3 Z# s8 w! ^# P# [& ^2 B
! N% s# V" G. J) \4 v3 G
文章的slug我用了隨機生成的方法,其實最好的方法應該是用文章標題來轉化,但那樣麻煩些懶得費事。文章作者默認為1,就是管理員。文章內容我用了Yoo版的方法:http://www.advertcn.com/thread-12629-1-1.html。能保證原創性,但損失了可讀性,由於是做外鏈用的,應該關係不大。% T; q9 B9 w$ k% f# E
1 ]2 d/ k; W2 t% a2 v+ J
如果想將文件夾下的文章隨機發佈的話,可以先將文件夾內文件遍歷,然後隨機抽取發佈的方法。
7 ]: B2 C7 }( g. I+ l這樣做成php頁面,某站目錄下,使用VPS的Crontab 用curl語法定時向該url發出請求,就可自動發佈一篇文章,如果想要多篇的話,可以使用循環。
* _& {, i" T! @9 R3 F7 y* w& m6 R& h6 L, b" N* e  Q
1 w" P* c/ @; h$ ^1 u$ E

- ]/ K. @; y- G. H
5 |" n0 l9 M& L
回復 给力 爆菊

使用道具 舉報

發表於 2013-12-3 22:37:54 | 顯示全部樓層

  1. / |+ i' m( e" E$ b- {( y
  2. <?php
    8 S" r! M; d- V! Z: O4 C
  3. //數據庫參數
    ' ]! ^" R7 J4 e, @1 o5 Q
  4. $$dbuser='';) t! v6 L3 c; p9 {, S
  5. $$dbpwd='';
    5 ]# w1 T3 j0 ?, m3 ~  z
  6. $$dbname='';
    3 x) T0 W4 H1 |" H6 P
  7. $$dbhost='';
    " M! Y3 G+ M6 J  C) i8 w
  8. $$dbtable='';7 p" s" T9 I" ?

  9. " q7 x* B. H2 E  M" }3 @9 N
  10. //設置讀取路徑
    + y$ a9 ~  `6 S% h3 L7 A: c
  11. $$rdcontent='xxxx.txt';+ g$ b  I7 i; I: \
  12. $$rdtitle='xxxxtitle.txt';
    7 V6 k# y" o% b4 }
  13. $$rdlink='xxxxlink.txt';
    ! m* [2 u9 u& M% Y( ]# l

  14. ( A% F! J, y% Y( F) N) H6 u
  15. //讀取插入鏈接,並設置發佈概率
    5 d5 T+ W+ H# X7 s, H& W7 b% I
  16. function gen_link($$rdlink){
    ; c' L1 P/ z4 O3 x8 Q# b/ J9 k0 X5 O
  17.         $$data2 = file($$rdlink);
    : ]+ C. K$ y& v' u  s: R; t
  18.         $$num2 = count($$data2);4 ]# Q- C+ C4 E, H( M7 P- S$ o
  19.         $$id2= mt_rand(0,$$num2-1);. D5 z* R5 M! ^0 W9 q
  20.         $$random= mt_rand(0,10);
    $ k) V$ T+ @* R8 h& d  Z
  21.         if($$random<5)
    " I1 k) J2 Q- m* T6 K
  22.                 $$link= trim($$data2[$$id2]);4 _. V/ y( d: L7 d% {) Y8 O
  23.         else1 ?" @- N; a5 F1 a6 ~
  24.                 $$link="";
    & {+ B5 h( F# N% ]* z: L: m  ]
  25.         return $$link;! X1 M2 ~$ _1 ]) B- b
  26. }
    + v7 `- {, F; C; D2 n

  27. 7 E. I+ {% E+ `; \
  28. //生成文章
    5 ]/ g" R2 ]$ v0 A: O) E+ ~
  29. $$str = "";' I5 x1 N0 @% o* F( O. x# ]
  30. $$title = "";1 S: o' h- w' G# g+ V

  31. ; c7 m2 p, O$ `3 b3 h7 A
  32. $$data2 = file($$rdtitle);
    ) U# y; e! h5 k3 m9 }7 A5 h% K' E
  33. $$num2 = count($$data2);0 ]/ N) S- w; O. \1 @# _. r3 d! Y
  34. $$id2 = mt_rand(0,$$num2-1);
    1 a9 T( e9 T5 \- u7 n, c! M
  35. $$title = $$data2[$$id2];# P3 ~- S4 l* q# I5 H/ t" m

  36. ( }0 Z) H! W2 A/ d% _; @  ?; j
  37. $$data = file($$rdcontent);2 O! q$ p( U4 y0 ^7 W
  38. $$num = count($$data);- C2 P/ N8 ~* e. A6 N5 d" k* B7 p

  39. 8 a4 s8 ?9 V: }7 Q
  40. for($$i=0;$$i<25;$$i++){+ V7 p+ t% j" ?
  41.         $$temp=" ";$ ^0 @+ ?# S+ Z! A3 \, n
  42.         if(($$i%5)==0)
    $ Y  j) d: q( F9 _+ z
  43.                 $$temp="1 f. W: R- n2 s
  44. \n";. s: q5 p1 B+ u! a( F
  45.         elseif(($$i==7)|($$i==21)){
    6 b1 G7 G# h: D8 Y) M
  46.                 $$links=gen_link($$rdlink);( U  K) F3 R5 ]7 P
  47.                 $$str=$$str." ".$$links." ";- W) @; H0 u) O5 ^" M' H9 m
  48.         }7 o4 m  N( x1 a4 B; G
  49.         $$id = mt_rand(0, $$num-1);
    6 k, r' _* F  o" m
  50.         $$line = trim($$data[$$id]);
    * c9 A% t  ^7 ]' b. e& x; Y& a6 R
  51.         $$str=$$str.$$temp.$$line;
    ; _) H) y! A3 A. H1 ]
  52. }: k! ]$ p+ A; f* y
  53. 3 r, `, O7 a: j
  54. //生成slug4 k" w# L/ F. V5 s/ f. w+ o$ s
  55. function generate_slug($$len){
    - Q+ o& s1 i8 E. l* ?! I# C3 C
  56.         $$chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    + Y( Y( h: I, d
  57.         $$slug="";3 o5 w" B5 O3 n3 n
  58.         for($$j=0;$$j<$$len;$$j++){
    3 H) I3 }" ~. s6 h. p+ V
  59.                 $$slug .= $$chars[ mt_rand(0, strlen($$chars) - 1) ];
    + a+ D) ]" W, A  |$ }
  60.         }1 {2 d# E; X7 g; B6 ~2 n/ ^  a" ]
  61.         return $$slug;3 k3 G. I4 ]; j( U8 k
  62. }6 r2 U, Q9 s7 X
  63. $$slug = generate_slug(17);
    # s- F; `3 N. i8 k' X/ v9 |
  64. 5 v2 o8 C  X, U
  65. //獲取發佈時間- ]/ o& N3 o, U) N$ n* L/ e  M4 J
  66. $$datetime= date("Y-m-d H:i:s");
    5 ^; Z- e! z* h& z& P: M8 O
  67. 5 O6 \0 \2 |$ \0 T
  68. $$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')";
    9 }  G. X, r; _# m1 B9 T! q

  69. ( L( o( k' U  A1 e6 s
  70. //連接數據庫並處理數據
    " K! W9 F* `( L/ z4 i
  71. $$con = mysql_connect($$dbhost,$$dbuser,$$dbpwd);. q) E& b5 ?7 D/ I
  72. if(!$$con){: H! E2 |" C% I. _% f; w% j6 O
  73.         die('Failed to connect to database! '.mysql_error());$ Y2 |0 z# Q$ b
  74. }else
    * G8 m) k* Z! q' L( N# u. @* w$ N
  75.         echo "Suscess to connect to database!4 _3 z! i, W( a+ @: B
  76. \n";3 h, t- V. {. y% h6 M+ M
  77. % D& c0 c" |- y7 w' j
  78. mysql_select_db($$dbname,$$con);
    9 E* N3 X2 P, }1 [6 i

  79. ) n7 O! M& _0 j( `% O, n
  80. $$result=mysql_query($$sql);$ D) l# l/ ^  i7 @3 _' ]' G6 l

  81. ' G' T: E8 T" z" w* K  U( c4 W5 `

  82. 2 m( L6 b2 r* _2 U* F) Q
  83. //前面已經插入,獲取插入id  b. F) {- b  P( x- g
  84. $$insert_id = mysql_insert_id();/ V/ \9 R; a% e/ t1 _3 c

  85. ) ~' q- e& j9 R7 P+ C  R
  86. //繼續插入wp_term_relationship表$ i5 ]+ R7 O% V) Y& y4 |# {% p$ W
  87. if($$insert_id > 0 ){
    & V8 Y, d7 X5 l- R: w
  88.         $$sql= "INSERT INTO `$$dbtable` (`object_id`, `term_taxonomy_id`, `term_order`) VALUES (NULL, '$$insert_id', NULL)";
    $ z: t) X% B# S% o

  89. 9 G1 Z# w6 u% L7 u1 _2 e/ B
  90.         $$result=mysql_query($$sql);
    ! v0 D! G$ P7 b4 h7 s6 C" p0 E
  91. }" c4 h8 b" I' {/ r- k3 A( S
  92. //關閉數據庫連接
    # M9 V9 P1 {" z# s( m8 x; q& X8 G  `
  93. mysql_close($$con);
    ) X8 O# s6 c1 X" P
  94. 4 m; o6 c* E8 z  d# ]' n% A2 m7 t! V
  95. 3 g: w- f" n& x' H9 ]7 }
  96. / L7 D8 e/ V# F9 s, D
  97. if(!$$result){$ d5 e) }: L; N, i
  98.         echo $$result;2 S9 D+ [" F7 t4 u# Y
  99.         die('Failed to post article! '.mysql_error());4 r4 o2 H4 p3 ~& D1 B( k
  100. }else
    * p+ F/ a1 Q* `& r
  101.         echo "Suscess to post article!\n";
    : G: S6 K; R4 _! k1 o8 z% d+ Y

  102. ) T6 V& f0 C# d9 F
  103. echo $$dbname." is done";; P7 E: U; a- f
  104. 9 D5 Z2 Y) V( v9 e
  105. ?>
    ! U8 s+ O" ^+ l+ X" c) E$ Y3 C

  106. ; |( y+ [- Z1 G( i7 M

  107. ; j2 P6 B  U; u0 I

  108. 4 p+ o$ P) u* l  L' J* Y
  109. ( A9 b4 b# _9 L2 J
複製代碼
代碼給你改了下,wp_term_relationship表插入的值,你應該還需要改一下,因為我已經忘了這幾個表的關係了,剩下你的分享很好,我們一般使用付費cronjob,因為這種東西穩定性很重要,可以搜索setcronjob8 j: m) H1 B& T5 @# s8 U) u  b- j# t
) E) J2 L* ]* L

8 F& V- s- c9 l- s" I% u  s% m如果你需要第1次插入的某些值,你需要在if($insert_id > 0 )下面再增加一個select的查詢4 o' e# o/ M! v0 F, A4 j5 m  A# L
前面既然都是插入的內容,那麼插入的內容事先就已經知道的,所以沒有必要做這個select查詢( h" Z8 \% Q! z, t- [" o! `" n9 G

, t6 _2 J& s, y/ }/ W

評分

參與人數 1點點 +4 收起 理由
hudba + 4 admire;)

查看全部評分

回復 给力 爆菊

使用道具 舉報

發表於 2013-12-4 08:41:01 | 顯示全部樓層
我之前是使用wp內容函數搞定的,效率比直接插sql慢些,但勝在穩定,基本不出問題
" ?$ D, n% M( H: j. J
回復 给力 爆菊

使用道具 舉報

發表於 2013-12-4 09:32:15 | 顯示全部樓層
你可以分兩步來處理,先插入文章,再導出文章ID,更新目錄.
9 ^) I8 J  }( b' _  C你可以查看mysql那幾個常用的指令。
4 Z7 Z: r- H) @6 h4 [' _2 H, w5 Q( Z) R" T" q! n+ y
回復 给力 爆菊

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 免费注册

本版積分規則

點基跨境 數位編輯創業論壇

GMT+8, 2025-7-15 05:53

By DZ X3.5

小黑屋

快速回復 返回頂部 返回列表