J'ai essayé de frapper l'API Mastodon avec Ruby (Faraday) / Python (Pycurl) / PHP (Curl)

J'ai essayé de frapper Mastdon pour le moment. Comme le titre l'indique, Ruby utilise Faraday, Python utilise Pycurl et PHP utilise Curl. J'ai enregistré l'application avec app.xx et utilisé test.xx pour m'authentifier et publier.

Ruby

app.rb


#!/usr/local/bin/ruby
# -*- coding: utf-8 -*-

require 'faraday'
require 'uri'

CALLBACK_URL = 'URL de l'application'
MASTODON_URL = 'URL de l'instance cible (par exemple: https://mstdn.high-low.ml)'
SCOPE = 'Autorisation que vous voulez (par exemple: read write)'

options = {
  client_name: 'Nom de l'application',
  redirect_uris: CALLBACK_URL,
  scopes: SCOPE
}

conn = Faraday.new(:url => MASTODON_URL) do |faraday|
  faraday.request :url_encoded
  faraday.response :logger
  faraday.adapter Faraday.default_adapter
end
response = conn.post do |request|
  request.url '/api/v1/apps'
  request.body = URI.encode_www_form(options)
end
print "Content-Type: application/json; charset=UTF-8\n\n"
print response.body

Enregistrez les "client_id" et "client_secret" affichés dans le résultat de sortie.

test.rb


#!/usr/local/bin/ruby
# -*- coding: utf-8 -*-

require 'cgi'
require 'uri'

cgi = CGI.new()

CALLBACK_URL = 'URL de l'application'
MASTODON_URL = 'URL de l'instance cible'
CLIENT_ID = 'app.CLIENT obtenu par rb_ID'
CLIENT_SECRET = 'app.CLIENT obtenu par rb_SECRET'
SCOPE = 'Autorité spécifiée'

if cgi['code'].empty?
  #Allez obtenir la certification
  options = {
    client_id: CLIENT_ID,
    response_type: 'code',
    scope: SCOPE,
    redirect_uri: CALLBACK_URL
  }
  print cgi.header({
    'status' => 'REDIRECT',
    'Location' => "#{MASTODON_URL}/oauth/authorize?#{URI.encode_www_form(options)}"
  })
else
  #Authentifié afin d'accéder_Je vais avoir un jeton
  require 'faraday'
  require 'json'

  options = {
    client_id: CLIENT_ID,
    client_secret: CLIENT_SECRET,
    grant_type: 'authorization_code',
    redirect_uri: CALLBACK_URL,
    scope: SCOPE,
    code: cgi['code']
  }

  conn = Faraday.new(:url => MASTODON_URL) do |faraday|
    faraday.request :url_encoded
    faraday.response :logger
    faraday.adapter Faraday.default_adapter
  end
  response = conn.post do |request|
    request.url '/oauth/token'
    request.body = URI.encode_www_form(options)
  end
  access_token = JSON.parse(response.body)['access_token']

  # access_Pendant que j'ai le jeton, je crie au centre du monde
  options = {
    mastodon_host: MASTODON_URL,
    status: 'Paon'
  }
  response = conn.post do |request|
    request.url '/api/v1/statuses'
    request.headers = {
      'Authorization' => "Bearer #{access_token}"
    }
    request.body = URI.encode_www_form(options)
  end
  print "Content-Type: application/json; charset=UTF-8\n\n"
  print response.body
end

L'écran d'authentification ressemble à ceci. スクリーンショット 2017-04-19 17.37.07.png

Python

app.py


#!/usr/bin/python
# -*- coding: utf-8 -*-

import pycurl, urllib
from StringIO import StringIO

CALLBACK_URL = 'URL de l'application'
MASTODON_URL = 'URL de l'instance cible'
SCOPE = 'Autorisation que vous voulez (par exemple: read write)'

options = {
	'client_name': 'Nom de l'application',
	'redirect_uris': CALLBACK_URL,
	'scopes': SCOPE
}

response = StringIO()
curl = pycurl.Curl()
curl.setopt(pycurl.URL, '%s/api/v1/apps' %(MASTODON_URL))
curl.setopt(pycurl.WRITEFUNCTION, response.write)
curl.setopt(pycurl.POST, 1)
curl.setopt(pycurl.POSTFIELDS, urllib.urlencode(options))
curl.perform()
print "Content-Type: application/json; charset=UTF-8\n\n"
print response.getvalue()

test.py


#!/usr/bin/python
# -*- coding: utf-8 -*-

import urllib, cgi
from StringIO import StringIO

form = cgi.FieldStorage()

CALLBACK_URL = 'URL de l'application'
MASTODON_URL = 'URL de l'instance cible'
CLIENT_ID = 'app.CLIENT obtenu par py_ID'
CLIENT_SECRET = 'app.CLIENT obtenu par py_SECRET'
SCOPE = 'Autorité spécifiée'

if not form.has_key('code'):
	#Je vais obtenir la certification
	options = {
		'client_id': CLIENT_ID,
		'response_type': 'code',
		'scope': SCOPE,
		'redirect_uri': CALLBACK_URL
	}
	print "Content-Type: text/html\n\n"
	print '<meta http-equiv=\"refresh\" content=\"0; URL=%s/oauth/authorize?%s\">' %(MASTODON_URL, urllib.urlencode(options))
else:
	# access_Je vais avoir un jeton
	import pycurl, json

	options = {
		'client_id': CLIENT_ID,
		'client_secret': CLIENT_SECRET,
		'grant_type': 'authorization_code',
		'redirect_uri': CALLBACK_URL,
		'scope': SCOPE,
		'code': form['code'].value
	}

	response = StringIO()
	curl = pycurl.Curl()
	curl.setopt(pycurl.URL, '%s/oauth/token' %(MASTODON_URL))
	curl.setopt(pycurl.WRITEFUNCTION, response.write)
	curl.setopt(pycurl.POST, 1)
	curl.setopt(pycurl.POSTFIELDS, urllib.urlencode(options))
	curl.perform()
	access_token = str(json.loads(response.getvalue())['access_token'])

	#Crier
	options = {
		'mastodon_host': MASTODON_URL,
		'status': 'Paon'
	}

	curl.setopt(pycurl.URL, '%s/api/v1/statuses' %(MASTODON_URL))
	curl.setopt(pycurl.HTTPHEADER, ['Authorization: Bearer %s' %(access_token)])
	curl.setopt(pycurl.POSTFIELDS, urllib.urlencode(options))
	curl.perform()

	print "Content-Type: application/json; charset=UTF-8\n\n"
	print response.getvalue()

PHP

app.php


<?php
define('CALLBACK_URL', 'URL de l'application');
define('MASTODON_URL', 'URL de l'instance cible (par exemple: https://mstdn.high-low.ml)');
define('SCOPE', 'Autorisation que vous voulez (par exemple: read write)');

$options = array(
	'client_name' => 'Nom de l'application',
	'redirect_uris' => CALLBACK_URL,
	'scopes' => SCOPE
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, MASTODON_URL. '/api/v1/apps');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $options);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec($ch);
curl_close($ch);

header('Content-type: application/json; charset=utf-8');
echo $response;

test.php


<?php
define('CALLBACK_URL', 'URL de l'application');
define('MASTODON_URL', 'URL de l'instance cible');
define('CLIENT_ID', 'app.CLIENT obtenu de php_ID');
define('CLIENT_SECRET', 'app.CLIENT obtenu de php_SECRET');
define('SCOPE', 'Autorité spécifiée');

if (!isset($_GET['code'])) {
	#Authentification
	$options = array(
		'client_id' => CLIENT_ID,
		'response_type' => 'code',
		'scope' => SCOPE,
		'redirect_uri' => CALLBACK_URL
	);
	header('Location: '. MASTODON_URL. '/oauth/authorize?'. http_build_query($options, '', '&'));
} else {
	# access_obtenir un jeton
	$options = array(
		'client_id' => CLIENT_ID,
		'client_secret' => CLIENT_SECRET,
		'grant_type' => 'authorization_code',
		'redirect_uri' => CALLBACK_URL,
		'scope' => SCOPE,
		'code' => $_GET['code']
	);

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, MASTODON_URL. '/oauth/token');
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $options);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	$response = curl_exec($ch);
	$data = json_decode($response);
	$access_token = $data->access_token;

	#Paon
	$options = array(
		'mastodon_host' => MASTODON_URL,
		'status' => 'Paon'
	);

	curl_setopt($ch, CURLOPT_URL, MASTODON_URL. '/api/v1/statuses');
	curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer {$access_token}"));
	curl_setopt($ch, CURLOPT_POSTFIELDS, $options);
	$response = curl_exec($ch);
	curl_close($ch);
	header('Content-type: application/json; charset=utf-8');
	echo $response;
}

référence

tootsuite/mastodon-api: A ruby interface for the Mastodon API Exemple d'utilisation de l'API de Mastodon avec curl --Qiita Comment accéder à l'API Mastodon

Recommended Posts

J'ai essayé de frapper l'API Mastodon avec Ruby (Faraday) / Python (Pycurl) / PHP (Curl)
J'ai essayé d'utiliser mecab avec python2.7, ruby2.3, php7
J'ai essayé de frapper l'API avec le client python d'echonest
Exemple PHP / Python / Ruby frappant l'API Path
J'ai essayé fp-growth avec python
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
J'ai essayé la gestion du suivi avec l'API Twitter et Python (facile)
Proxy dynamique avec python, ruby, PHP
J'ai essayé webScraping avec python.
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé la communication SMTP avec Python
J'ai essayé ChatOps avec Slack x API Gateway x Lambda (Python) x RDS
J'ai essayé d'utiliser l'API Google avec Ruby et Python - Faites de la base de données une feuille de calcul et gérez-la avec Google Drive
Réaliser un générateur PHP / Python avec Golang / Ruby
J'ai essayé le rendu non réaliste avec Python + opencv
J'ai essayé un langage fonctionnel avec Python
J'ai essayé la récurrence avec Python ② (séquence de nombres Fibonatch)
# J'ai essayé quelque chose comme Vlookup avec Python # 2
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé des centaines de millions de SQLite avec python
J'ai essayé d'accéder à l'API Qiita depuis le début
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé "License OCR" avec l'API Google Vision
J'ai essayé la différenciation jacobienne et partielle avec python
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé la synthèse de fonctions et le curry avec python
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé d'automatiser la fabrication des sushis avec python
J'ai essayé "Receipt OCR" avec l'API Google Vision
J'ai essayé d'envoyer un email avec SendGrid + Python
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de toucher un fichier CSV avec Python
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
J'ai essayé de démarrer avec le script python de blender_Partie 02
J'ai essayé d'implémenter le perceptron artificiel avec python
Mayungo's Python Learning Episode 1: J'ai essayé d'imprimer avec impression
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé la "conversion de morphologie" de l'image avec Python + OpenCV
J'ai essayé de résoudre la théorie des nombres entiers d'AOJ avec Python
J'ai essayé Python> autopep8
J'ai essayé Python> décorateur
J'ai essayé de déployer Kubernetes Pods / Helm Chart avec Pulumi (Python)
J'ai essayé de trouver l'entropie de l'image avec python
Essayez d'utiliser l'API Twitter rapidement et facilement avec Python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de simuler la propagation de l'infection avec Python
Une note sur l'utilisation de l'API Facebook avec le SDK Python
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
J'ai essayé de créer diverses "données factices" avec Python faker