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

add Instagram sync tool

parent 64fcef2b
No related branches found
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.
Finish editing this message first!
Please register or to comment