0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

長文を140字に自動分割してツイートする

Last updated at Posted at 2017-12-04

探しても任意のツイートへのリプライ指定ができるツールがなく、
自分用にローカルで動かすために書いたので、色々と適当です。

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

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

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

index.php
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<meta name="robots" content="noindex,nofollow">
	<meta id="_robots" content="noindex,nofollow">
	<title>連続ツイート</title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
</head>
<body>
<?php
ini_set( 'display_errors', 1 );

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

require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

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

mb_internal_encoding("UTF-8");

if (empty($_REQUEST['text'])) : #=====================================================
?>
<script>
$(document).ready(function(){
	$("#twid").val(window.localStorage.getItem('twId'));
	$("#twtext").val(window.localStorage.getItem('twText'));
	$("#twid").focus();
});
jQuery(function($){
	function changeText () {
		window.localStorage.setItem('twId', $("#twid").val());
		window.localStorage.setItem('twText', $("#twtext").val());
	}
	$("#twid").bind("change keyup click", (changeText));
	$("#twtext").bind("change keyup click", (changeText));
});
</script>
<pre><form action="index.php" method="post">ツイート内容 <input type="submit" value=" 分割 ">

<input type="text" id="twid" name="twid" style="width:400px;max-width:80%;padding:10px;" placeholder="リプライ先のツイート" autocomplete="off"><input type="reset" value="消去" style="margin-left:10px;padding:7px;">

<textarea id="twtext" name="text" style="border:1px solid #999;width:500px;max-width:90%;height:500px;max-height:80%;padding:10px;"></textarea>
</form></pre>
<?php
elseif (empty($_REQUEST['textlist'])) : #=====================================================
?>

<script>
jQuery(function($){
	if (window.localStorage.getItem('twText') == '') {
		location.href = 'index.php';
	}
});
</script>

<pre>
<?php

	if (!empty($_REQUEST['twid'])) {
		$twid = substr($_REQUEST['twid'], strrpos($_REQUEST['twid'], '/')+1);
	} else {
		$twid = '';
	}
	echo '<form action="index.php" method="post">ツイート分割内容 <input type="submit" value="ツイート"><input type="hidden" name="text" value="ok">
<input type="text" name="twid" value="'.$twid.'" readonly style="width:400px;">';

	// リプライするツイートの内容を表示
	if (!empty($twid)) {
	$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
		$statuses = $connection->get("statuses/show/$twid");
		echo '
<textarea style="width:400px;max-width:90%;height:100px;" disabled>'.$statuses->text.'</textarea>';
	}

	$textlist = array();
	$tweetcount = 0;
	$textlist[$tweetcount] = '';
	$count = 0;
	$start = 0;

	$text = trim($_REQUEST['text']);
	$text = preg_replace("/\r\n|\r|\n/", "\n", $text);
	// パターン
	$pattern = '/|(\w*)《(\w*)》/u';
	$noruby = '\1';
	$text = preg_replace($pattern,$noruby,$text);

	$text = str_replace(" ", "", $text);
	$lastchar = '';
	for ($i = 0; $i < mb_strlen($text); $i++) {
		$char = mb_substr($text, $i, 1);

		// 0字の時きたら飛ばす文字
		if (($count == 0) and ($char == '、')) continue;
		if (($count == 0) and ($char == '。')) continue;
		if (($count == 0) and ($char == '」')) continue;

		if (($char == '…') and ($lastchar == '…')) {
			$lastchar = '';
			continue;
		}

		// 空行二回で次のツイート
		if (($char == "\n") and ($lastchar == "\n")) {
			$nextchar = mb_substr($text, $i+1, 1);
			if ($nextchar == "\n") {
				$i++;
				$tweetcount++;
				$textlist[$tweetcount] = '';
				$count = 0;
				$lastchar = '';
				continue;
			}
		}

		// 130字以上の時に来たら分割する文字
		if ($count > 130) {
			if (($char == "\n")) {
				$tweetcount++;
				$textlist[$tweetcount] = '';
				$count = 0;
				$lastchar = '';
				continue;
			}
			if (($char == "「")) {
				$tweetcount++;
				$textlist[$tweetcount] = '「';
				$count = 1;
				$lastchar = '';
				continue;
			}
			if (($char == "―")) {
				$tweetcount++;
				$textlist[$tweetcount] = '―';
				$count = 1;
				$lastchar = '';
				continue;
			}
		}

		$textlist[$tweetcount] .= $char;

		// 130字以上の時に来たら分割する文字
		if ($count > 130) {
			if (($char == "」")) $count = 140;
			if (($char == "、")) $count = 140;
			if (($char == "。")) $count = 140;
		}
		$count++;
		if ($count > 139) {
			$tweetcount++;
			$textlist[$tweetcount] = '';
			$count = 0;
			$lastchar = '';
		} else {
			$lastchar = $char;
		}
	}
	foreach ($textlist as $value) {
		echo "\n".'<textarea class="splittext" name="textlist[]" style="width:400px;max-width:90%;height:100px;margin-top:10px;">'.trim($value).'</textarea>'.mb_strlen($value);
	}
?>

<?php
	echo '</form></pre>';
else : #=====================================================
?>

<script>
if (window.localStorage.getItem('twText') == '') {
	location.href = 'index.php';
}
</script>
<a href="./">新規ツイート</a>

<pre>
<?php
	sleep(1);

	$twitter = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);

	$id = $_REQUEST['twid'];
	// ツイート作成
	foreach ($_REQUEST['textlist'] as $value) {
		$tweettime = date("Y/m/d H:i:s");
		$text = $value;
		$result = $twitter->post(
		        "statuses/update",
		        array("status" => $text, "in_reply_to_status_id" => $id)
		);

		if($twitter->getLastHttpCode() == 200) {
		    // ツイート成功
		    echo "<b>成功 </b>$tweettime\n$text\n\n";
		    $body = $twitter->getLastBody();
		    $id = $body->id_str;
		} else {
		    // ツイート失敗
		    echo "<b style=\"color:red\">失敗 </b>$tweettime\n$text\n\n";
		}

	    // 出力バッファの内容を送信する
	    @ob_flush();
	    @flush();

		sleep(1);
	}
?>
</pre>
<script>
$(document).ready(function(){
	window.localStorage.setItem('twId', '/<?php echo $id ?>');
	window.localStorage.setItem('twText', '');
});
</script>

<?php
endif;
?>
<hr>
</body>
</html>
key.php
<?php

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

?>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?