{"id":232781,"date":"2023-01-29T18:16:00","date_gmt":"2023-01-29T15:16:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232781"},"modified":"2023-02-10T16:25:11","modified_gmt":"2023-02-10T13:25:11","slug":"hur-man-aaterupplivar-gamla-inlaegg-med-php-och-crontab-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/hur-man-aaterupplivar-gamla-inlaegg-med-php-och-crontab-wordpress\/","title":{"rendered":"Hur man \u00e5terupplivar gamla inl\u00e4gg med PHP och Crontab (WordPress)"},"content":{"rendered":"\n<p>Anta att du har ganska m\u00e5nga anst\u00e4ndiga inl\u00e4gg i din blogg och du undrar om det finns ett s\u00e4tt att posta p\u00e5 twitter\/facebook (eller andra sociala n\u00e4tverk) automatiskt och regelbundet.<\/p>\n<p>Det h\u00e4r \u00e4r inte sv\u00e5rt. \u00c4ven om det h\u00e4r inl\u00e4gget kommer att v\u00e4gleda dig att posta p\u00e5 twitter men principen \u00e4r liknande f\u00f6r andra sociala n\u00e4tverk. <a href=\"https:\/\/helloacm.com\/php-function-to-post-to-twitter\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Det h\u00e4r inl\u00e4gget<\/a> introducerar PHP-funktionen f\u00f6r att posta p\u00e5 twitter.<\/p>\n<p>Vi vill inte publicera samma inneh\u00e5ll\/artiklar om och om igen inom en kort tidsperiod. D\u00e4rf\u00f6r m\u00e5ste vi skapa en SQL-tabell som lagrar historiken f\u00f6r de inl\u00e4gg som \u00e5terpublicerats.<\/p>\n<pre><code>--\n-- Table structure for table `twitter`\n--\n\nCREATE TABLE IF NOT EXISTS `twitter` (`id` bigint(32) unsigned NOT NULL,\n  `url` varchar(255) NOT NULL,\n  `posttime` datetime NOT NULL) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;<\/code><\/pre>\n<p>Tabellen har tre f\u00e4lt, ett \u00e4r prim\u00e4rnyckeln (automatisk \u00f6kning), det andra f\u00e4ltet \u00e4r URL-platsen som har \u00e5terpublicerats och det tredje \u00e4r datum och tid.<\/p>\n<p>Alla f\u00e4lt ska vara korrekt indexerade.<\/p>\n<pre><code>ALTER TABLE `twitter`\n ADD PRIMARY KEY (`id`), ADD KEY `url` (`url`,`posttime`), ADD KEY `posttime` (`posttime`);<\/code><\/pre>\n<p>Nu, om du har en wordpress, m\u00e5ste du fr\u00e5ga efter de giltiga inl\u00e4ggen och slumpm\u00e4ssigt v\u00e4lja en.<\/p>\n<pre><code>\u00a0 \/\/ database constants\n\u00a0 require('db.php');\n\u00a0 \/\/ twitter function\n\u00a0 require('twitter.php');\n\u00a0 mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error());\n\u00a0 mysql_select_db(DB_NAME);\n\u00a0 $today = date(\"Y-m-d h:i:s\");\n\u00a0 \/\/ get total number of valid posts\n\u00a0 $query = \"\n \u00a0 \u00a0 \u00a0select \n \u00a0 \u00a0 \u00a0 \u00a0count(1)\n \u00a0 \u00a0 \u00a0from \n \u00a0 \u00a0 \u00a0 \u00a0`wp_posts`\n \u00a0 \u00a0 \u00a0where \n \u00a0 \u00a0 \u00a0 \u00a0(`post_type` = 'page' or `post_type` = 'post') and \n \u00a0 \u00a0 \u00a0 \u00a0(`post_status` = 'publish')\n \u00a0\";\n\u00a0 $result = mysql_query($query) or die(mysql_error());\n\u00a0 $total = mysql_result($result, 0, 0);\n\u00a0 $cnt = 0;\n\u00a0 if ($total &gt; 0) {\n\u00a0 \u00a0 while (1) {\n\u00a0 \u00a0 \u00a0 \/\/ pick a random npost\n\u00a0 \u00a0 \u00a0 $idx = mt_rand(0, $total - 1);\n\u00a0 \u00a0 \u00a0 $query = \"\n \u00a0 \u00a0 \u00a0 \u00a0select \n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0`post_name`, `post_title` \n \u00a0 \u00a0 \u00a0 \u00a0from \n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0`wp_posts`\n \u00a0 \u00a0 \u00a0 \u00a0where \n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0(`post_type` = 'page' or `post_type` = 'post') and \n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0(`post_status` = 'publish')\n \u00a0 \u00a0 \u00a0 \u00a0limit $idx, 1\n \u00a0 \u00a0 \u00a0\";\n\u00a0 \u00a0 \u00a0 $result = mysql_query($query) or die(mysql_error());\n\u00a0 \u00a0 \u00a0 $row = mysql_fetch_array($result);\n\u00a0 \u00a0 \u00a0 \/\/ post URL\n\u00a0 \u00a0 \u00a0 $url = \"&lt;a class=\"vglnk\" target=\"_blank\" href=\"http:\/\/www.codingforspeed.com\/\".$row['post_name'].\"\/\" rel=\"nofollow\"&gt;&lt;span&gt;http&lt;\/span&gt;&lt;span&gt;:\/\/&lt;\/span&gt;&lt;span&gt;www&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;codingforspeed&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;com&lt;\/span&gt;&lt;span&gt;\/\".$&lt;\/span&gt;&lt;span&gt;row&lt;\/span&gt;&lt;span&gt;['&lt;\/span&gt;&lt;span&gt;post&lt;\/span&gt;&lt;span&gt;_&lt;\/span&gt;&lt;span&gt;name&lt;\/span&gt;&lt;span&gt;'].\"\/&lt;\/span&gt;&lt;\/a&gt;\";\n\u00a0 \u00a0 \u00a0 $title = $row['post_title'];\n\u00a0 \u00a0 \u00a0 $query2 = \"select date(`posttime`) from `twitter` where `url` = '$url' order by `posttime` desc limit 1\";\n\u00a0 \u00a0 \u00a0 $result2 = mysql_query($query2) or die(mysql_error());\n\u00a0 \u00a0 \u00a0 if (mysql_num_rows($result2) &gt; 0) {\n\u00a0 \u00a0 \u00a0 \u00a0 $last = mysql_result($result2, 0, 0);\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ last reposted date\/time\n\u00a0 \u00a0 \u00a0 \u00a0 $diff = abs((strtotime($today) - strtotime($last)) \/ 24 \/ 3600);\n\u00a0 \u00a0 \u00a0 \u00a0 if ($diff &lt;= 90) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $cnt ++;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if ($cnt &gt; 16) { \/\/ max retry time to avoid endless loop\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 break;\u00a0 \n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 continue; \/\/ try next random post\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \/\/ record the post in the table\n\u00a0 \u00a0 \u00a0 $query = \"\n \u00a0 \u00a0 \u00a0 \u00a0insert into `twitter`\n \u00a0 \u00a0 \u00a0 \u00a0set \n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0`url` = '$url',\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0`posttime` = '$today'\n \u00a0 \u00a0 \u00a0\";\n\u00a0 \u00a0 \u00a0 mysql_query($query) or die(mysql_error());\n\u00a0 \u00a0 \u00a0 $msg = \"#Repost \".$title;\n\u00a0 \u00a0 \u00a0 echo \"$msg $url\";\n\u00a0 \u00a0 \u00a0 postTwitter($msg, $url);\n\u00a0 \u00a0 \u00a0 break;\n\u00a0 \u00a0 }\n\u00a0 }<\/code><\/pre>\n<p>Tanken h\u00e4r \u00e4r att f\u00e5 ett slumpm\u00e4ssigt inl\u00e4gg och kontrollera om det har postats om under de senaste 90 dagarna (\u00e4ndra vid behov), om inte, posta det och registrera det i databasen. Annars kan du prova n\u00e4sta slumpm\u00e4ssiga inl\u00e4gg tills ett antal g\u00e5nger har pr\u00f6vats. Om det inte finns n\u00e5gra s\u00e5dana &quot;giltiga&quot; inl\u00e4gg (t.ex. inga nya artiklar p\u00e5 l\u00e4nge) kommer den att uppt\u00e4cka detta och \u00f6verge slingan.<\/p>\n<p>Kontrollera ocks\u00e5 det h\u00e4r <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/laegg-till-ett-naesta-slumpmaessigt-inlaegg-i-wordpress-sidmall-med-hjaelp-av-sql\/\" title=\"inl\u00e4gget\">inl\u00e4gget<\/a> f\u00f6r att f\u00e5 slumpm\u00e4ssig rad med SQL.<\/p>\n<p>N\u00e4sta sak \u00e4r att testa den ordentligt och l\u00e4gga den i <strong><a href=\"https:\/\/helloacm.com\/crontab-generator\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">crontab<\/a><\/strong> t.ex. en g\u00e5ng om dagen.<\/p>\n<pre><code>0 8 * * * php \/home\/justyy.lai\/auto.php &gt; \/dev\/null 2&gt;&amp;1<\/code><\/pre>\n<p>Meddelandet som skickas till twitter \u00e4r anpassningsbart, och jag lade till en hash-tagg &quot;#Repost&quot; f\u00f6r att skilja fr\u00e5n andra vanliga inl\u00e4gg. Jag l\u00e4nkar ocks\u00e5 mitt twitterkonto till en facebooksida, s\u00e5 att varje g\u00e5ng twitsen l\u00e4ggs upp p\u00e5 Twitter, Facebook-sidan status \u00e4r ocks\u00e5 synkroniserad, vilket \u00e4r mycket l\u00e4ttare f\u00f6r mig.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hur man \u00e5terupplivar gamla inl\u00e4gg med PHP och Crontab<\/p>\n","protected":false},"author":1,"featured_media":220869,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[682,838,848,999,901,807,868],"tags":[1173],"class_list":["post-232781","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-att-blogga","category-guide-foer-nyboerjare","category-handledningar","category-innehallsmarknadsforing","category-koda","category-php-9","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/232781","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=232781"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/232781\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/220869"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=232781"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=232781"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=232781"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}