数珠繋ぎのツイートシステムに予約機能を付けました😂 #php #code

2022.10.07

Logging

おはようございます、偏頭痛持ちは雨が降るが一番大変です☔。

先日、数珠繋ぎのツイートシステムを作ったのですが、そのシステムに予約機能を付けました。尚、TwitterAPIのバージョン2でスケジュールのパラメーターが今のところ無いですね。これから先、機能が付くかも知れないですが今のところ無いようです。因みにソースコードは近日中にQiitaGithubにUPします。此処ではソースコードの一部を掲載します(※記事を更新しました下へスクロール🫠)。

Twitter API v2 ツイート数珠繋ぎ

尚、crontabでPHPファイルを叩くようにしています、あと注意事項ですが予約を一度した投稿については変更等は出来ません、編集機能等の機能追加の予定はないです。また、予約管理はsqlite3を使用して管理しています。

<?php
date_default_timezone_set('Asia/Tokyo');
ini_set("display_errors",0);
require_once "./data/tw-config-v2.php";
require_once "../vendor/autoload.php";

use Abraham\TwitterOAuth\TwitterOAuth;

class tw
{
    var $connection = null;
    var $pdo = null;
    function __construct()
    {
        $this->connection = new TwitterOAuth(APIKEY, APISECRET, ACCESSTOKEN, ACCESSTOKENSECRET);
        $this->connection->setApiVersion("2");
    }
    function db_connection()
    {
        try {
            //code...
            $res = $this->pdo = new PDO("sqlite:./data/tw-tweets-db.sqlite3");
        } catch (\Throwable $th) {
            //throw $th;
            //print $th->getMessage();
            $res = false;
        }
        return $res;
    }

    function timecheck($timeonoff, $times)
    {
        if (!$timeonoff) return true;
        $n = new DateTime();
        $t = new DateTime($times);
        return $t <= $n ? true : false;
    }

    function pickup_tweets(mixed $tw_text = null, int $timeonoff = 0, mixed $times = null, string $id = "")
    {
        if (!$times) return false;
        $obj = (object)[];
        $times = preg_replace("/\-/", "/", $times);
        $times = preg_replace("/T/", " ", $times);

        if ($this->timecheck($timeonoff, $times)) {
            if (isset($tw_text) && is_array($tw_text)) {
                foreach ($tw_text as $key => $value) {
                    if (preg_replace("/[ | ]/", "", $value)) {
                        $obj = !$key ? ($this->connection->post("tweets", ["text" => $value], true)
                        ) : ($this->connection->post("tweets", ["reply" => ["in_reply_to_tweet_id" => $obj->data->id], "text" => $value], true)
                        );
                    }
                }
                return true;
            }
        } else {
            return $timeonoff ? $this->save_sqlite($tw_text, $timeonoff, $times, $id): true;
        }
    }

    function save_sqlite($tw_text = null, int $timeonoff = 0, mixed $times = null, string $id = "")
    {
        if ($this->db_connection()) {
            try {
                //code...
                if (isset($tw_text) && is_array($tw_text)) {
                    foreach ($tw_text as $key => &$value) {
                        if (preg_replace("/[ | ]/", "", $value)) {
                            $stmt = $this->pdo->prepare("insert into tweets (tw_id,user,times,tw_text)values(:tw_id,:user,:times,:tw_text)");
                            $stmt->bindValue(":tw_id", $key, PDO::PARAM_INT);
                            $stmt->bindValue(":user", $id, PDO::PARAM_STR);
                            $stmt->bindValue(":times", $times, PDO::PARAM_STR);
                            $stmt->bindValue(":tw_text", $value, PDO::PARAM_STR);
                            $stmt->execute();
                        }
                    }
                }
                $this->pdo = null;
                return true;
            } catch (\Throwable $th) {
                //throw $th;
                return false;
            }
        }
    }
    function tweets_load(string $id = "")
    {
        if (!$id) return false;
        try {
            //code...
            $value = null;
            if ($this->db_connection()) {
                $stmt = $this->pdo->prepare("select * from tweets where user = :user order by times,tw_id asc;");
                $stmt->bindValue(":user", $id, PDO::PARAM_STR);
                $res = $stmt->execute();
                $value = $res ? $stmt->fetchAll() : false;
                $this->pdo = null;
            }
            return $value;            
        } catch (\Throwable $th) {
            //throw $th;
            return false;
        }
    }
    function tweets_update(int $key = 0, int $timeonoff = 0, mixed $times = null, string $id = "",mixed $tw_text="")
    {
        try {
            //code...
            if(!preg_replace("/[ | ]{0,}/","",$tw_text))return false;
            if ($this->db_connection()) {
                $stmt = $this->pdo->prepare("update tweets set tw_text = :tw_text where tw_id = :tw_id and user = :user and times = :times");
                $stmt->bindValue(":tw_id", $key, PDO::PARAM_INT);
                $stmt->bindValue(":user", $id, PDO::PARAM_STR);
                $stmt->bindValue(":times", $times, PDO::PARAM_STR);
                $stmt->bindValue(":tw_text", $tw_text, PDO::PARAM_STR);
                $stmt->execute();
                $this->pdo = null;
            }
        } catch (\Throwable $th) {
            //throw $th;
            return false;
        }
        return true;

    }

    function tweets_delete(int $key = 0, int $timeonoff = 0, mixed $times = null, string $id = "")
    {
        try {
            //code...
            if ($this->db_connection()) {
                $stmt = $this->pdo->prepare("delete from tweets where tw_id = :tw_id and user = :user and times = :times");
                $stmt->bindValue(":tw_id", $key, PDO::PARAM_INT);
                $stmt->bindValue(":user", $id, PDO::PARAM_STR);
                $stmt->bindValue(":times", $times, PDO::PARAM_STR);
                $stmt->execute();
                $this->pdo = null;
            }
        } catch (\Throwable $th) {
            //throw $th;
            return false;
        }
        return true;
    }

    function bat_tweets(mixed $value = null)
    {
        if (!$value) return false;
        $obj = (object)[];
        $t = "";
        foreach ($value as $key => $val) {
            if ($this->timecheck(1, $val["times"])) {
                $obj = ($val["times"]<>$t)? ($this->connection->post("tweets", ["text" => $val["tw_text"]], true)
                ) : ($this->connection->post("tweets", ["reply" => ["in_reply_to_tweet_id" => $obj->data->id], "text" => $val["tw_text"]], true)
                );
                $this->tweets_delete($val["tw_id"], 1, $val["times"], $val["user"]);
                $t = $val["times"];
            } else {
              //  var_dump($val);
              //  break;
            }
        }
    }
}

if ($argv[0]) {
    $tw = new tw();
    $value = $tw->tweets_load(xss_d($argv[1]));
    $tw->bat_tweets($value);
}
function xss_d($val = false)
{
    if (is_array($val)) {
        foreach ($val as $key => $value) {
            $val[$key]  = strip_tags($value);
            $val[$key]  = htmlspecialchars($val[$key]);
        }
    } else {
        $val  = strip_tags($val);
        $val  = htmlspecialchars($val);
    }
    return $val;
}

追記:予約編集機能なども付けました🙄。

GithubとQittaのリンクはこちらです。
Github:https://github.com/taoka-toshiaki/tweets-system-box1
Qitta:https://qiita.com/taoka-toshiaki/items/5ef12b60b267742bf584

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

2, , 39, Asia, Code, crontab, date, default, github, ini, lt, php, qiita, Se, set, Sqlite, timezone, Tokyo, TwitterAPI, UP, コード, これ, システム, スクロール, スケジュール, ソース, ツイート, ところ, バージョン, パラメーター, ファイル, 一部, , 予定, 予約, 事項, , 使用, 偏頭痛, , 先日, 変更等, 大変, 投稿, 掲載, 数珠繋ぎ, 更新, 機能, 機能等, 此処, 注意, 管理, 編集, 記事, 近日, 追加, ,

一億円の配当金が入るXさんの利回りを調べてみました。

2022.08.19

Logging

おはようございます、今日は偏頭痛もなく一日を過ごしたいです。

先日、株式デイトレーダーで生活している人、その界隈では有名なテスタさんが下記の呟きをしていたので、配当利回り率を調べてみました。

配当利回りを見ると殆どの銘柄で配当利回り5%超え。配当利回り率の高い銘柄では7%超えの物もありました、平均すると5%超えになります。データで見てみると意外に手堅いなと思う反面、結局、堅実派が勝つだなって印象を持ちました。

必勝法なんて無くて株が下がりだしたら売って、株が買値より高くなったら売る、その繰り返しで坦々と出来る人、そして復習と明日の策を考えられる人がトレーダーとして勝っていくだろうなって、そういう意味ではIT関係者はそういう素質を持っている人は結構多い気がします。

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

5, 7, IT, データ, デイトレーダー, テスタ, トレーダー, , 一億, 下記, , 今日, 偏頭痛, 先日, 利回り, 印象, 反面, 堅実, 平均, 復習, 必勝法, 意味, 明日, 有名, , 株式, 殆ど, , , 生活, 界隈, , 素質, 買値, 配当, 配当金, 銘柄, 関係者,

今日は偏頭痛がかなり凄い日?

2020.11.27

Logging

今日は偏頭痛がかなり凄い日なので、ブログ書くのも結構大変なので久しぶりにブログを書かないでおこうと思っていたのだけど、どれぐらい偏頭痛が痛いのかを絵にしてみたのですが、あんな柔らかいタッチの絵では通じないなと思いつつも、絵を記載しました。因みにこの頃、偏頭痛の薬を併用するようにしました。バファリンではなく、もう一つの方を購入したのですが確かに飲むと飲まないとでは違いがあるのですが、やはり薬局の薬には限界があるのか、たまに飲んでいるのに痛みを感じるのです。因みに何故、偏頭痛が起こるのかは未だに解明されていないのだとか・・・・。

一説では脳の血管が神経に触ることにより、痛みが生じるのだとか、、。だとかじゃなくて、そろそろ解明してほしい気がします。あの567が解明されたように医療関係者の知恵を総動員すればこの世にある病気や疾患はまじで99%治せる病なんじゃないかとこのごろ思っています。人類の叡智とスパコンと人工知能でなんとか、偏頭痛を直して頂きたい。かなり辛い!!

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

567, 99, かなり, こと, この世, ごろ, スパコン, タッチ, たま, どれぐらい, バファリン, ブログ, まし, もう一つ, 一説, 久しぶり, 人工, 人類, 今日, 併用, 偏頭痛, 医療, 叡智, 大変, , , 未だ, , 疾患, , 病気, 知恵, 知能, 神経, , 総動員, , , 薬局, 血管, 解明, 記載, 購入, , 違い, 関係者, 限界, ,

実はとてもとても*リピート。

2020.08.01

Logging

実はとてもとてもとても・・・・痛いの永遠ループ。
偏頭痛というものは、痛いのです。そしておいらの様にひどい人になると
仕事もできなくなるぐらい、痛いのです。

どんな痛みかと言えば、ズキズキンが頭の中で絶えず続きます、
ひどい時になるとズキズキンの痛みで吐き気がするのです、こうなると
何も手につかない。

珈琲などを飲むと偏頭痛が和らぐといいますが、かなり強い偏頭痛はそんな事では全然和らがないのです、病院に行ってお薬を貰い服用するか、その日は何もせず横になり安静にするかだと思います。

気圧の谷に偏頭痛は起こりやすいといいます、あれは確かに本当なんですが、おいらの場合は、、、、若干、遅れてくる場合が多くて正直な所、『今かよ!』という時に偏頭痛になることが多いです。

偏頭痛が治れば良いのになあ・・・とつくづく思ったので今回ネタにしました?

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

あれ, おいら, お薬, かなり, こと, ズキ, ズキン, ネタ, もの, リピート, ループ, , , , , 今回, 仕事, , 偏頭痛, 吐き気, 場合, 安静, , , , , 服用, 本当, , 正直, 気圧, 永遠, 珈琲, 病院, 若干, , ,