Dodajemy obsługę sia.pixeldrain.com do Greenshoota.

Zacznijmy od tego czym jest sia.pixeldrain.com oraz Greenshoot. Ten pierwszy to darmowy hosting plików w sieci Sia (sia.tech), ten drugi za to jest darmowym i otwartym screenshooterem.

Całość będzie polegała na wykonaniu prostego skryptu w pythonie, czytaj. wykonaj polecenie (curl) i z outputu wyciągnij informacje o pliku.

A więc na początek, przyjrzyjmy się jak wysyłać pliki do sia.pixeldrain.com. Mamy do tego udostępnione api (które tymczasowo nie wymaga żadnej rejestracji klucza ani niczego podobnego) i powiedzmy że dokumentację, dostępna o tutaj.

Generalnie, polecenie które chcemy wywołać brzmi tak:

curl -F file=@D:\artur\Downloads\714318701_2_644x461_pc-stacjonary-taniocha-dodaj-zdjecia_rev001.jpg https://sia.pixeldrain.com/api/file

A poprawna odpowiedź powinna zaprezentować się tak:

{"id":"CFTCN_","success":true}

Gdzie id to identyfikator naszego pliku na hostingu, a success określa czy plik został pomyślnie wysłany. Co w efekcie daje nam oczywiście taki link:

https://sia.pixeldrain.com/u/CFTCN_

Tak więc jak wspomniałem, nasz prosty skrypt będzie wysyłał plik do chmury, tworzył sobie link, zwracał go a nastepnie kopiowal link do schowka i gotowe. Chyba dośc banalne.

Zaczynamy od pobrania argumentów podanych programowi (albo właściwie argumentu, drugiego). W tym celu importujemy bibliotekę sys i printujemy sobie drugi argument.

import sys

print(sys.argv[1])

I wlasciwie to w tym momencie możemy wpisac nasze polecenie do Greenshoota. W tym celu otwieramy ustawienia Greenshoota, przechodzimy do zakladki Plugins i w ustawieniach wtyczki External command Plugin dodajemy dodatkowe polecenie.

Przechwytywanie

Gdzie jako druga opcje podajemy sciezke do naszej binarki pythona a jako trzecia <sciezke do skryptu> {0}

Skoro już mamy to dodane, mozemy wrocic do naszego kodu. Jako output naszego polecenia dostajemy jsona, więc pora na dodanie kawalka kodu pozwalajacego go wykonac, odczytanie outputu z niego i wyciagniecie z niego potrzebnych nam danych (czytaj. id)

W tym celu zaimportujmy biblioteke os i wykorzystajmy fukcje os.popen. Dodatkowo też potrzebujemy w naszej sciezce do pliku zastapic pojedyncze slashe podwójnymi, do tego wykorzystamy funkcje replace

W celu ogarniecia calego otrzymanego z kodu jsona wykorzystamy bibliotekę json i funkcje json.loads.

W tym momencie nasz kod wygląda tak:

import sys, os, json

path = sys.argv[1]
command = "curl -F file=@" + path + " https://sia.pixeldrain.com/api/file"
command = command.replace('\\','\\\\')
result = os.popen(command).read()
json = json.loads(result)
print(json['id'])

Praktycznie calosc jest juz skonczona, pozostalo kopiowanie linka do schowka. Jako ze korzystam z Windowsa, posluze sie wbudowanym poleceniem clip wywolanym przez os.popen. Jedna linijka kodu wiecej i gotowe.

import sys, os, json

path = sys.argv[1]
command = "curl -F file=@" + path + " https://sia.pixeldrain.com/api/file"
command = command.replace('\\','\\\\')
result = os.popen(command).read()
json = json.loads(result)
os.popen("echo https://sia.pixeldrain.com/u/" + json['id'] + " | clip")

To tyle, co prawda po napisaniu calosci uswiadomiono mi ze niepotrzebnie wykorzystywalem do tego curla, bo wykonanie zapytania zajelo by niewiele wiecej.

edit:
Poniżej poprawiona wersja tego samego kodu, bez wykorzystania curla i clip'a. Wymaga tylko doinstalowania bibliotek requests i pyperclip poleceniem pip install requests oraz pip install pyperclip

import sys, pyperclip, requests

request = requests.post("https://sia.pixeldrain.com/api/file", files={'file': open(sys.argv[1], 'rb')})
pyperclip.copy("https://sia.pixeldrain.com/u/" + request.json()['id'])
Dodajemy obsługę sia.pixeldrain.com do Greenshoota.
Share this

Subscribe to artur9010.pl