✨ Add Mastodon
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,3 +1,4 @@ | ||||
| /config.php | ||||
| /twitter-config.php | ||||
| /mastodon-config.php | ||||
| /.idea | ||||
| /vendor/ | ||||
|   | ||||
							
								
								
									
										47
									
								
								Mastodon/Mastodon.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								Mastodon/Mastodon.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| <?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); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										8
									
								
								mastodon-config.php.template
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								mastodon-config.php.template
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| return [ | ||||
|     'domain'       => '', | ||||
|     'app_id'       => '', | ||||
|     'secret'       => '', | ||||
|     'access_token' => '', | ||||
| ]; | ||||
							
								
								
									
										40
									
								
								mastodon.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								mastodon.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| <?php | ||||
|  | ||||
| use Shikiryu\WebGobbler\Assembler\Superpose; | ||||
| use Shikiryu\WebGobbler\Config; | ||||
| use Shikiryu\WebGobbler\Pool; | ||||
|  | ||||
| include 'vendor/autoload.php'; | ||||
| include 'Mastodon/Mastodon.php'; | ||||
|  | ||||
| $mastodon_config = require 'mastodon-config.php'; | ||||
|  | ||||
| try { | ||||
|     // generate picture | ||||
|     $config = new Config('./config.json'); | ||||
|     $pool = new Pool($config); | ||||
|     $upload_image_name = uniqid('superpose_', true); | ||||
|     $image = new Superpose($pool, $config); | ||||
|     $image_path = sprintf('./render/%s.jpg', $upload_image_name); | ||||
|     $image->saveTo($image_path); | ||||
|  | ||||
|     // send picture to mastodon | ||||
|     $app = new MastodonAPI($mastodon_config['access_token'], $mastodon_config['domain']); | ||||
|     $curl_file = curl_file_create(realpath($image_path)); | ||||
|     $body = ['file' => $curl_file]; | ||||
|     $response = $app->uploadMedia($body); | ||||
|     $file_id = $response->id; | ||||
|     $statusText = 'Nouveau collage'; | ||||
|     $status_data = [ | ||||
|         'status'      => $statusText, | ||||
|         'visibility'  => 'public', | ||||
|         'language'    => 'fr', | ||||
|         'media_ids[]' => $file_id, | ||||
|     ]; | ||||
|  | ||||
|     $app->postStatus($status_data); | ||||
| } catch (Exception $exception) { | ||||
|     echo $exception->getMessage(); | ||||
| } | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user