1
0
mirror of https://github.com/Eleirbag89/MastodonBotPHP synced 2024-12-22 19:18:21 +01:00

First version

This commit is contained in:
e2800 2020-04-10 21:48:35 +02:00
parent d52d3215ea
commit b36746721a
4 changed files with 228 additions and 0 deletions

41
Mastodon.php Normal file
View File

@ -0,0 +1,41 @@
<?php
class MastodonAPI {
private $token;
private $instance_url;
public function __construct($token, $instance_url) {
$this->token = $token;
$this->instance_url = $instance_url;
}
public function postStatus($status) {
return $this->callAPI("/api/v1/statuses", "POST", $status);
}
public function uploadMedia($media) {
return $this->callAPI("/api/v1/media", "POST", $media);
}
public function callAPI($endpoint, $method, $data) {
$headers = [
'Authorization: Bearer ' . $this->token,
'Content-Type: multipart/form-data'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->instance_url . $endpoint);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$reply = curl_exec($ch);
if (!$reply) {
return json_encode(['ok'=>false, 'curl_error_code' => curl_errno($ch_status), 'curl_error' => curl_error(ch_status)]);
}
curl_close ($ch);
return json_decode($reply, true);
}
}
?>

32
examples/media_bot.php Normal file
View File

@ -0,0 +1,32 @@
<?php
include_once('Mastodon.php');
$token="XXXXX"; // Token of your Mastodon welcome bot account
$base_url="https://botsin.space"; // URL of your instance (Do not include '/' at the end.)
$visibility="private"; // "Direct" means sending welcome message as a private message. The four tiers of visibility for toots are Public , Unlisted, Private, and Direct (default)
$language="en"; // en for English, zh for Chinese, etc.
$mastodon = new MastodonAPI($token, $base_url);
$curl_file = curl_file_create('./imageOnServer.jpg','image/jpg','imagename.jpg');
$body = [
'file' => $curl_file
];
$response = $mastodon -> uploadMedia($body);
$file_id = $response->id;
$statusText = "This is a status";
$status_data = array(
"status" => $statusText,
"visibility" => $visibility,
"language" => $language,
"media_ids[]" => $file_id
);
$mastodon -> postStatus($status_data);
?>

77
examples/reddit_bot.php Normal file
View File

@ -0,0 +1,77 @@
<?php
include_once('Mastodon.php');
$token="XXXXX"; // Token of your Mastodon bot account
$base_url="https://botsin.space"; // URL of your instance (Do not include '/' at the end.)
$visibility="private"; // "Direct" means sending welcome message as a private message. The four tiers of visibility for toots are Public , Unlisted, Private, and Direct (default)
$language="en"; // en for English, zh for Chinese, etc.
$feed_url = "https://www.reddit.com/r/Subreddit.json"; // the subreddit url ending in *.json
$file = 'dataSubreddit.txt';
$tagline = " check out on ";
if (!($jsonTxt = file_get_contents($feed_url)))
die('Error loading the feed url');
$json = json_decode($jsonTxt, true);
$first_article = false;
$lastDate = '';
if($f = fopen($file, 'r')){
$lastDate = fgets($f);
fclose($f);
}
$statuses = array();
foreach ($json["data"]["children"] as $item) {
$itemData = $item["data"];
$ts = $itemData["created_utc"];
if (($lastDate == "" || $ts > $lastDate) && !$itemData["is_self"]) {
$post = new BlogPost();
$post->link = $itemData["url"];
$post->title = $itemData["title"];
$post->category = $itemData["subreddit"];
$post->nsfw = $itemData["over_18"];
array_push($statuses, $post);
if (!$first_article) {
$myfile = fopen($file, "w") or die("Unable to open file!");
fwrite($myfile, $ts);
fclose($myfile);
$first_article = true;
}
}
}
$statuses = array_reverse($statuses);
$mastodon = new MastodonAPI($token, $base_url);
foreach ($statuses as $s) {
$status_data = array(
"visibility" => $visibility,
"language" => $language
);
$statusText = $s->title . $tagline . $s->link . " ";
if ($s->nsfw) {
$status_data["status"] = "NSFW";
$status_data["spoiler_text"] = $statusText;
} else {
$status_data["status"] = $statusText;
}
$mastodon -> postStatus($status_data);
}
class BlogPost {
var $ts;
var $link;
var $category;
var $title;
var $nsfw;
}
?>

78
examples/rss_bot.php Normal file
View File

@ -0,0 +1,78 @@
<?php
include_once('Mastodon.php');
$token="XXXXX"; // Token of your Mastodon welcome bot account
$base_url="https://botsin.space"; // URL of your instance (Do not include '/' at the end.)
$visibility="private"; // "Direct" means sending welcome message as a private message. The four tiers of visibility for toots are Public , Unlisted, Private, and Direct (default)
$language="en"; // en for English, zh for Chinese, etc.
$feed_url = "https://wordpressblog.com/feed/";
$file = 'data.txt';
if (!($rss = simplexml_load_file($feed_url)))
die('Error loading the feed url');
$first_article = false;
$lastDate = '';
if($f = fopen($file, 'r')){
$lastDate = fgets($f);
fclose($f);
}
$statuses = array();
foreach ($rss->channel->item as $item) {
$ts = strtotime($item->pubDate);
if ($lastDate == "" || $ts > $lastDate) {
$post = new BlogPost();
$post->link = (string) $item->link;
$post->title = (string) $item->title;
$post->category = $item->category;
array_push($statuses, $post);
if (!$first_article) {
$myfile = fopen($file, "w") or die("Unable to open file!");
fwrite($myfile, $ts);
fclose($myfile);
$first_article = true;
}
}
}
$statuses = array_reverse($statuses);
$mastodon = new MastodonAPI($token, $base_url);
foreach ($statuses as $s) {
$statusText = $s->title . " leggi su " . $s->link . " ";
foreach ($s->category as $c) {
$statusText = $statusText . "#" . formatHashTag($c) . " ";
}
$status_data = array(
"status" => $statusText,
"visibility" => $visibility,
"language" => $language
);
$mastodon -> postStatus($status_data);
}
function formatHashTag($category) {
$filtered = str_replace('/', ' ', $category);
$upper = ucwords($filtered);
return str_replace(' ', '', $upper);
}
class BlogPost {
var $ts;
var $link;
var $category;
var $title;
}
?>