Skip to content
Snippets Groups Projects
Commit e0fd1475 authored by Tomáš Valenta's avatar Tomáš Valenta
Browse files

add Instagram sync tool

parent 64fcef2b
Branches
No related tags found
1 merge request!8Release
Pipeline #12244 failed
......@@ -5,5 +5,8 @@ SECRET_KEY="%@=^sip3=tqn6d_-xvvidc1@-t0t3&*kab@vr4c4"
CHOBOTNICE_API_URL="https://chobotnice.pirati.cz/graphql/"
CHOBOTNICE_RV_GID="R3JvdXBUeXBlOjYyNQ=="
INSTAGRAM_CLIENT_ID=3828083077418467
INSTAGRAM_CLIENT_SECRET=da7ea1af344e60ccd2bfcfa0f296b808
# Production settings
ALLOWED_HOSTS="tools.pirati.cz"
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class InstagramTokenConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'instagram_token'
from django.db import models
# Create your models here.
{% extends "shared/base.html" %}
{% load render_bundle from webpack_loader %}
{% block title %}Kalkulačka přístupových tokenů do Instagramu{% endblock %}
{% block header_name %}Instagram{% endblock %}
{% block description %}Přihlášením svým účtem získáš přístupové údaje, které můžeš využít pro synchronizaci obsahu na domovské stránce pirati.cz.{% endblock %}
{% block head %}
<link
rel="stylesheet"
href="https://styleguide.pirati.cz/2.11.x/css/styles.css"
>
{% endblock %}
{% block content %}
<main>
<h1 class="text-6xl font-bebas mb-5">Kalkulačka přístupových tokenů do Instagramu</h1>
<div class="prose max-w-none mb-5">
<p>
Přihlášením svým účtem získáš přístupové údaje, které můžeš využít pro
<a href="https://majak.pirati.cz/admin" target="_blank">synchronizaci obsahu</a>
na domovské stránce pirati.cz.
</p>
</div>
<div class="prose max-w-none">
<p>
<strong>Uživatelské ID:</strong> <i>{{ user_id }}</i>
</p>
<p>
<strong>Přístupový token:</strong>
<pre>{{ access_token }}</pre>
</p>
</div>
</main>
{% endblock %}
{% extends "shared/base.html" %}
{% load render_bundle from webpack_loader %}
{% block title %}Kalkulačka přístupových tokenů do Instagramu{% endblock %}
{% block header_name %}Instagram{% endblock %}
{% block description %}Přihlášením svým účtem získáš přístupové údaje, které můžeš využít pro synchronizaci obsahu na domovské stránce pirati.cz.{% endblock %}
{% block head %}
<link
rel="stylesheet"
href="https://styleguide.pirati.cz/2.11.x/css/styles.css"
>
{% endblock %}
{% block content %}
<main>
<h1 class="text-6xl font-bebas mb-5">Kalkulačka přístupových tokenů do Instagramu</h1>
<div class="prose max-w-none mb-5">
<p>
Výsledky níže můžeš zkopírovat do Majáku.
</p>
</div>
<a class="btn btn--icon" href="{{ authorization_url }}">
<div class="btn__body-wrap">
<div class="btn__body">Přihlásit se</div>
<div class="btn__icon">
<i class="ico--chevron-right"></i>
</div>
</div>
</a>
</main>
{% endblock %}
from django.test import TestCase
# Create your tests here.
from django.urls import path
from . import views
app_name = "instagram_token"
urlpatterns = [
path("", views.index, name="index"),
path("exchange", views.exchange, name="exchange"),
]
import requests
from django.conf import settings
from django.shortcuts import render
from django.urls import reverse
from django_http_exceptions import HTTPExceptions
# Create your views here.
def index(request):
redirect_uri = request.build_absolute_uri(reverse("instagram_token:exchange"))
authorization_url = (
"https://api.instagram.com/oauth/authorize"
f"?client_id={settings.INSTAGRAM_CLIENT_ID}"
f"&redirect_uri={redirect_uri}"
"&scope=user_profile,user_media"
"&response_type=code"
)
return render(
request,
"instagram_token/index.html",
{
"authorization_url": authorization_url
}
)
def exchange(request):
code = request.GET.get("code")
if code is None:
return reverse("instagram_token:index")
exchange_request = requests.post(
"https://api.instagram.com/oauth/access_token",
data={
"client_id": settings.INSTAGRAM_CLIENT_ID,
"client_secret": settings.INSTAGRAM_CLIENT_SECRET,
"code": code,
"grant_type": "authorization_code",
"redirect_uri": request.build_absolute_uri(reverse("instagram_token:exchange")),
}
)
exchange_request.raise_for_status()
exchange_request = exchange_request.json()
return render(
request,
"instagram_token/exchange.html",
{
"access_token": exchange_request["access_token"],
"user_id": exchange_request["user_id"],
}
)
......@@ -49,6 +49,7 @@ INSTALLED_APPS = [
"member_group_size_calc",
"rv_voting_calc",
"mail_signature",
"instagram_token",
]
MIDDLEWARE = [
......@@ -125,3 +126,8 @@ CHOBOTNICE_API_URL=env.str(
"https://chobotnice.pirati.cz/graphql/"
)
CHOBOTNICE_RV_GID=env.str("CHOBOTNICE_RV_GID")
# Instagram
INSTAGRAM_CLIENT_ID = env.str("INSTAGRAM_CLIENT_ID")
INSTAGRAM_CLIENT_SECRET = env.str("INSTAGRAM_CLIENT_SECRET")
......@@ -19,5 +19,6 @@ urlpatterns = [
path("vypocet-skupiny-clenu/", include("member_group_size_calc.urls")),
path("hlasovani-rv/", include("rv_voting_calc.urls")),
path("emailove-podpisy/", include("mail_signature.urls")),
path("instagram/", include("instagram_token.urls")),
path("", include("shared.urls")),
]
shared/static/shared/instagram.webp

38 KiB

......@@ -15,7 +15,7 @@
<main class="flex flex-col gap-8">
<section>
<h2 class="head-alt-md mb-5">Zabudované nástroje</h2>
<ul class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
<li class="card">
<a href="{% url "member_group_size_calc:index" %}">
......@@ -36,7 +36,7 @@
</div>
</div>
</li>
<li class="card">
<a href="{% url "rv_voting_calc:index" %}">
<img
......@@ -56,7 +56,7 @@
</div>
</div>
</li>
<li class="card">
<a href="{% url "mail_signature:index" %}" target="_blank">
<img
......@@ -76,12 +76,33 @@
</div>
</div>
</li>
<li class="card">
<a href="{% url "instagram_token:index" %}" target="_blank">
<img
src="{% static "shared/instagram.webp" %}"
alt="Kalkulačka přístupových tokenů do Instagramu"
class="w-full h-48 object-cover"
>
</a>
<div class="p-4">
<h2 class="mb-2 text-xl font-bold">
<a href="{% url "instagram_token:index" %}" target="_blank">
Kalkulačka přístupových tokenů do Instagramu
</a>
</h2>
<div class="font-light text-sm break-words">
Přihlášením svým účtem získáš přístupové údaje, které můžeš využít pro
synchronizaci obsahu na domovské stránce pirati.cz.
</div>
</div>
</li>
</ul>
</section>
<section>
<h2 class="head-alt-md mb-5">Externí nástroje</h2>
<ul class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
<li class="card">
<a href="https://z.pirati.cz" target="_blank">
......@@ -102,7 +123,7 @@
</div>
</div>
</li>
<li class="card">
<a href="https://generator.pirati.cz" target="_blank">
<img
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment