Published © CC BY-NC-SA

Making Art by Judging Reddit

Is the Raspberry Pi 4 powerful enough to judge Reddit? This project is all about answering the important questions.

BeginnerShowcase (no instructions)16 hours1,040

Things used in this project

Hardware components

Screen
×1
Picture Frame
×1
Raspberry Pi 4 Model B
Raspberry Pi 4 Model B
×1

Software apps and online services

Raspbian
Raspberry Pi Raspbian
Microsoft Azure
Microsoft Azure
Pushshift.io

Story

Read more

Code

Code

Python
import requests
import time
import json
import re
import pygame
import random


def getLatestComment():

    url = "https://api.pushshift.io/reddit/search"
    querystring = {"sort":"desc","sort_type":"retrieved_on","limit":"1","lang":"eng"}
    response = requests.request("GET", url, params=querystring)
    d = json.loads(response.text)
    comment = str(d['data'][0]['body'])
    comment = comment.replace("'", "")
    print('Comment: ' + comment)
    return comment

def getSentimentScore(comment):

    url = "https://westeurope.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment"

    payload = '{"documents": [{"text":"' + comment + '",  "language": "en", "id":"1"}]}'

    headers = {
        'ocp-apim-subscription-key': "xxxxxxx",
        'content-type': "text/json; charset=utf-8",
        'cache-control': "no-cache"
    }

    try:

        response = requests.request("POST", url, data=payload.encode('utf-8'), headers=headers)

        d = json.loads(response.text)
        score =  float(d['documents'][0]['score'])

    except Exception:
        score = random.random()

    print('Score: '  + str(score))
    return score


def run(fillScreen):

    divides = 4
    widthSteps = width/divides
    heightSteps = height/divides
    positions = []

    size = (steps,steps)

    for block in range(divides):

        if block == 0 or block == 2:
            startX = 0
        else:
            startX = (widthSteps * 2)

        if block == 0 or block == 1:
            startY = 0
        else:
            startY = (heightSteps * 2) 

        startPositions = (startX,startY)
     
        for segment in range(divides):

            if segment % 2 != 0:
                posX = startX + (widthSteps * 2 - steps)
            else:
                posX = startX

            if segment == 2 or segment == 3:
                posY = startY + (heightSteps * 2 - steps)
            else:
                posY = startY

            position = (posX,posY)
            positions.append(position)

    rightDown = [0,4,8,12]
    rightUp =   [2,6,10,14]

    
    leftDown = [1,5,9,13]
    leftUp =   [3,7,11,15]

    for i in range(120):

        index = 0

        if fillScreen == False:
            time.sleep(2)
            comment = getLatestComment()
            score = getSentimentScore(comment)
            randomColour = 255 * score
        else:
            randomColour = random.random() * 255

    
        colour = (255,randomColour,randomColour)

        
        for position in positions:
            
            pygame.draw.rect(surface,colour,(position,size))
            pygame.display.update()

            if index in rightDown:

                if index == 0 or index == 8:
                    if position[0] == 420:
                        position = (0 , position[1] + steps)
                    else:
                        position = (position[0] + steps, position[1])

                elif index == 4 or index == 12:
                    if position[0] == 1320:
                        position = (900 , position[1] + steps)
                    else:
                        position = (position[0] + steps, position[1])


            elif index in rightUp:

                if index == 2 or index == 10:
                    if position[0] == 420:
                        position = (0 , position[1] - steps)
                    else:
                        position = (position[0] + steps, position[1])

                elif index == 6 or index == 14:
                    if position[0] == 1320:
                        position = (900 , position[1] - steps)
                    else:
                        position = (position[0] + steps, position[1])


            elif index in leftDown:

                if index == 1 or index == 9:
                    
                    if position[0] == 450:
                        position = (870 , position[1] + steps)
                    else:
                        position = (position[0] - steps, position[1])

                elif index == 5 or index == 13:

                    if position[0] == 1350:
                        position = (1770 , position[1] + steps)
                    else:
                        position = (position[0] - steps, position[1])

            if index in leftUp:

                if index == 3 or index == 11:
                    
                    if position[0] == 450:
                        position = (870 , position[1] - steps)
                    else:
                        position = (position[0] - steps, position[1])

                elif index == 7 or index == 15:

                    if position[0] == 1350:
                        position = (1770 , position[1] - steps)
                    else:
                        position = (position[0] - steps, position[1])
            
            
            positions[index] = position
            index += 1





pygame.init()
width = 1800
height = 960
steps = 30

#Create a displace surface object
surface = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)

run(True)

while True:
    run(False)

Credits

Comments