Skip to content
This repository has been archived by the owner on Jul 23, 2020. It is now read-only.

Import 100 greatest singers of all time #24

Merged
merged 1 commit into from
Apr 15, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions awesome100/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
'movies',
'novels',
'python_libraries',
'singers',
'songs',
'writers',
'rest_framework',
Expand Down
1 change: 1 addition & 0 deletions awesome100/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,6 @@
url('api/', include('actors.urls')),
url('api/', include('authors.urls')),
url('api/', include('movies.urls')),
url('api/', include('singers.urls')),

] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Empty file added singers/__init__.py
Empty file.
4 changes: 4 additions & 0 deletions singers/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from django.contrib import admin
from singers.models import Singer

admin.site.register(Singer)
5 changes: 5 additions & 0 deletions singers/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class SingersConfig(AppConfig):
name = 'singers'
34 changes: 34 additions & 0 deletions singers/get_authors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from requests_html import HTMLSession

from singers.models import Singer

session = HTMLSession()
r = session.get('http://www.imdb.com/list/ls000050684/')
singers = r.html.find('.lister-item')


def import_data(i, singer):
try:
rank = i
url = singer.absolute_links.pop()
name = singer.find('a')[1].text
best_song = singer.find('a')[2].text
summary = singer.find('p')[1].text
image_url = singer.find('img')[0].attrs.get('src')
except Exception as ex:
print(str(ex))
try:
c, created = Singer.objects.get_or_create(
rank=rank,
url=url,
name=name,
best_song=best_song,
summary=summary,
image_url=image_url,
)
if created:
c.save()
print('\nSinger, {}, has been saved.'.format(c))
except Exception as ex:
print('\n\nSomething went wrong saving this singer: {}\n{}'
.format(name, str(ex)))
16 changes: 16 additions & 0 deletions singers/management/commands/import_best_singers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from django.core.management.base import BaseCommand

from singers.get_authors import singers, import_data


class Command(BaseCommand):
help = 'Import Singers data'

SINGERS = staticmethod(singers)
IMPORT_DATA = staticmethod(import_data)

def handle(self, *args, **options):
i = 1
for singer in self.SINGERS:
self.IMPORT_DATA(i, singer)
i = i + 1
27 changes: 27 additions & 0 deletions singers/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.12 on 2018-04-15 18:05
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='Singer',
fields=[
('rank', models.IntegerField(primary_key=True, serialize=False)),
('name', models.CharField(max_length=300, null=True)),
('url', models.URLField(null=True)),
('image_url', models.URLField(null=True)),
('summary', models.TextField(null=True)),
('best_song', models.CharField(max_length=500, null=True)),
],
),
]
Empty file added singers/migrations/__init__.py
Empty file.
13 changes: 13 additions & 0 deletions singers/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from django.db import models


class Singer(models.Model):
rank = models.IntegerField(primary_key=True)
name = models.CharField(max_length=300, null=True)
url = models.URLField(null=True)
image_url = models.URLField(null=True)
summary = models.TextField(null=True)
best_song = models.CharField(max_length=500, null=True)

def __str__(self):
return self.name
8 changes: 8 additions & 0 deletions singers/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from rest_framework import serializers
from . import models


class SingerSerializer(serializers.ModelSerializer):
class Meta:
model = models.Singer
fields = '__all__'
8 changes: 8 additions & 0 deletions singers/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from django.conf.urls import url

from . import views

urlpatterns = [ # Ignore PycodestyleBear (W605)
url('^singers/$', views.ListSinger.as_view()),
url('^singer/(?P<pk>\d+)/$', views.DetailSinger.as_view()),
]
15 changes: 15 additions & 0 deletions singers/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# todos/views.py
from rest_framework import generics

from . import models
from . import serializers


class ListSinger(generics.ListCreateAPIView):
queryset = models.Singer.objects.all()
serializer_class = serializers.SingerSerializer


class DetailSinger(generics.RetrieveUpdateDestroyAPIView):
queryset = models.Singer.objects.all()
serializer_class = serializers.SingerSerializer
1 change: 1 addition & 0 deletions templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ <h1>Welcome</h1>
<li><a href="/api/actors/">100 greatest actors of all time</a>
<li><a href="/api/authors/">100 greatest authors of all time</a>
<li><a href="/api/movies/">100 greatest movies of all time</a>
<li><a href="/api/singers/">100 greatest singers of all time</a>
</ul>
</body>
</html>