summaryrefslogtreecommitdiff
path: root/app/syndication/syndicators.py
blob: f4709c759bf1792386aef6bb4ec5ddd77badb88e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from django.conf import settings
from django.test.client import Client

from twython import Twython
from bs4 import BeautifulSoup
from medium import Client as MediumClient
import flickrapi


def absolute_urls_for_syndication(s):
    soup = BeautifulSoup(s, "lxml")
    for a in soup.find_all('a'):
        if a['href'][:1] == "/":
            a['href'] = "https://luxagraf.net%s" % a['href']
    return soup


def post_to_medium(item):
    client = MediumClient(application_id=settings.MEDIUM_CLIENT_ID, application_secret=settings.MEDIUM_CLIENT_SECRET)
    client.access_token = settings.MEDIUM_INT_TOKEN
    user = client.get_current_user()
    head = '<p><i>This was originally posted <a href="https://luxagraf.net%s" rel="canonical">on my own site</a>.</i></p>' % item.get_absolute_url()
    body = "%s %s" % (head, absolute_urls_for_syndication(item.body_html))
    # Create a post.
    post = client.create_post(
        user_id=user["id"],
        title=item.title,
        content=body,
        content_format="html",
        publish_status="public",
        canonical_url="https://luxagraf.net%s" % item.get_absolute_url(),
        license="all-rights-reserved"
    )
    return post["url"]


def build_facebook_feed():
    print("+++++++++++++building+++++++++++")
    c = Client()
    response = c.get('/iafeed.xml', HTTP_HOST='127.0.0.1')
    f = open("%siafeed.xml" % settings.FLATFILES_ROOT, 'wb')
    f.write(response.content)
    f.close()


def post_photo_to_twitter(photo):
    p = open(photo.get_image_path_by_size("2280"), 'rb')
    print(p)
    t = Twython(settings.TWITTER_API_KEY, settings.TWITTER_API_SECRET, settings.TWITTER_ACCESS_TOKEN, settings.TWITTER_ACCESS_SECRET)
    try:
        geo = t.reverse_geocode(lat=photo.latitude, lon=photo.longitude, accuracy=1500, granularity="city")
        geo_id = geo['result']['places'][0]['id']
    except:
        pass
    response = t.upload_media(media=p)
    print(response)
    if photo.caption:
        status = photo.caption
    else:
        status = photo.title
    try:
        status = t.update_status(status=status, media_ids=[response['media_id']], place_id=geo_id)
    except:
        status = t.update_status(status=status, media_ids=[response['media_id']])
    print(status['entities']['media'][0]['expanded_url'])


def post_photo_to_flickr(photo):
    flickr = flickrapi.FlickrAPI(settings.FLICKR_API_KEY, settings.FLICKR_API_SECRET)
    sent = flickr.upload(filename=photo.get_image_path_by_size("original"), title=photo.title, description=photo.caption)
    photo_id = sent.find('photoid').text
    photo.flickr_id = photo_id
    try:
        flickr.photos.geo.setLocation(photo_id=photo_id, lat=photo.latitude, lon=photo.longitude, accuracy=12)
    except:
        pass