PHP
Twitter

Twitterのスレッドを1テキストにまとめる

任意のツイートから遡ってツイートのテキスト部分だけをまとめるツールです。
色々と適当です。

参考:Twitter APIでつぶやきを取得する
https://qiita.com/yokoh9/items/760e432ebd39040d5a0f

Twitter Apps
https://apps.twitter.com/

twitteroauth
https://github.com/abraham/twitteroauth/releases

使い方:一番上のフォームにスレッドの一番最後のツイートのURLを貼る。ボタンを押す。
100以上ツイートがある場合、一番下のフォームに次のツイートのIDが表示されます。
それをコピーして一番上のフォームにペーストしてボタンを押せば、前のツイートを取得できます。

index.php
<?php
include('header.php');
use Abraham\TwitterOAuth\TwitterOAuth;


if (!empty($_REQUEST['twid'])) {
    $twid = substr($_REQUEST['twid'], strrpos($_REQUEST['twid'], '/')+1);
    $storage = "'/$twid'";
} else {
    $twid = '';
    $storage = "window.localStorage.getItem('twId')";
}

?>

<script>
$(document).ready(function(){
    function changeText () {
        var tcount = $("#twtext").val().length;
        $("#tcount").text(tcount);
        window.localStorage.setItem('twId', $("#twid").val());
    }

    $("#twid").val(<?php echo $storage?>);
    changeText;

    $("#twid").bind("change keyup click", (changeText));
    $("#twtext").bind("change keyup click", (changeText));
    $("#twReset").click(function(){
        $("#twid").val('');
        $("#twid").focus();
    });
});
</script>
<form action="index.php" method="get">
<div class="form-group row align-items-center">
<div class="input-group">
<input type="button" id="twReset" value="×" class="input-group-addon form-control form-control-sm" style="flex:1;display:block;width:30px;">
<input type="text" id="twid" name="twid" class="input-group form-control form-control-sm" placeholder="最後のツイート" autocomplete="off" style="flex:8;" value="/<?php echo $twid?>">
<input type="submit" id="" value="スレッド読込" class="form-control form-control-sm btn-sm btn-primary" style="flex:3;display:block">
</div>
</div>
</form>

<form action="split.php" method="post">
<div class="form-group row align-items-center">
</div>


<?php
    // スレッドを取得
    $connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
    $thread = '';
    for ($i = 0; $i < 100; $i++) {
        if (!empty($twid)) {
            $statuses = $connection->get("statuses/show", array("id" => $twid, "tweet_mode"=>"extended"));
            $thread = $statuses->full_text."\n".$thread;
            $twid = $statuses->in_reply_to_status_id;
        } else {
            break;
        }
    }
?>

スレッド内容(最大100ツイート)<br>
<div class="form-group row">
<span style="position:absolute;top:2;left:0;font-size:6px;background-color:#fff;opacity:0.6;color:#0099ff;" id="tcount"></span>
<textarea id="twtext" name="text" class="form-control form-control-sm" rows=15><?php echo $thread?></textarea>
最初のツイート<input type="text" class="form-control form-control-sm" value="/<?php echo $twid?>">
</div>
</form>

<?php

include('footer.php');

?>
header.php
<?php
ini_set( 'display_errors', 1 );

// タイムゾーン
date_default_timezone_set('Asia/Tokyo');

require "twitteroauth/autoload.php";

// APIキー
require "./key.php";
$consumerKey = YOUR_CONSUMER_KEY;
$consumerSecret = YOUR_CONSUMER_SECRET;
$accessToken = YOUR_ACCESSTOKEN;
$accessTokenSecret = YOUR_ACCESSTOKEN_SECRET;

mb_internal_encoding("UTF-8");

?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="robots" content="noindex,nofollow">
    <meta id="_robots" content="noindex,nofollow">
    <title>ツイートまとめ</title>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="  crossorigin="anonymous"></script>

<style type="text/css">
#pageTop {

  position: fixed;
  bottom: 20px;
  right: 20px;
}

#pageTop a {
  display: block;
  z-index: 999;
  padding: 4px 8px 8px 8px;
  border-radius: 30px;
  width: 35px;
  height: 35px;
  background-color: #9FD6D2;
  color: #fff;
  font-weight: bold;
  text-decoration: none;
  text-align: center;
  opacity: 0.8;
}

#pageTop a:hover {
  text-decoration: none;
  opacity: 0.6;
}
</style>
</head>
<body>
<div class="container" style="margin-top:20px;">
<div class="row">
<div class="col-11 col-md-6">

footer.php
</div>

</div>
</div><!-- /.container -->
<hr style="margin-bottom:400px;">
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
<script>
$(function () {
    var topBtn = $('#pageTop');
    topBtn.hide();
    //スクロールが30に達したらボタン表示
    $(window).scroll(function () {
        if ($(this).scrollTop() > 30) {
            topBtn.fadeIn();
        } else {
            topBtn.fadeOut();
        }
    });
    //スクロールでトップへもどる
    topBtn.click(function () {
        $('body,html').animate({
            scrollTop: 0
        }, 500);
        return false;
    });
});
</script>
<p id="pageTop"><a href="#"></a></p>
</body>
</html>

key.phpに自分のアカウントで取得したKEYをセットしておけば、鍵アカウントでも取得できます。

key.php
<?php

define("YOUR_CONSUMER_KEY", "");
define("YOUR_CONSUMER_SECRET", "");
define("YOUR_ACCESSTOKEN", "");
define("YOUR_ACCESSTOKEN_SECRET", "");

?>