Browse Source

Merge pull request #5 from ooguz/testing

0.1.6 Release Candidate
master 0.1.6
Özcan Oğuz 2 years ago
committed by GitHub
parent
commit
7ad08dec17
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      README.md
  2. 2
      data/config.toml
  3. 8
      pfxposter/__init__.py
  4. 5
      pfxposter/__main__.py
  5. 55
      pfxposter/pfxposter.py
  6. 80
      pfxposter/poster.py
  7. 1
      requirements.txt
  8. 9
      setup.py

4
README.md

@ -13,10 +13,10 @@ A PixelFed to Mastodon and Twitter crossposter that is not written as intended.
In order to post PixelFed entries to Twitter, you will need a Mastodon-Twitter crossposter, you may find them on web.
## Installation
```
pip3 install pfxposter
python3 -m pip install pfxposter
```
Using virtual enviroment is strongly recommended, for the reason that the requests library of the distro vendor may be overrided after the installation.
## Usage

2
data/config.toml

@ -1,4 +1,4 @@
updated = 2020-08-24 00:00:00+00:00
updated = 1970-01-01T00:00:00+00:00
[mastodon]
mastodon_url = "https://oyd.social"

8
pfxposter/__init__.py

@ -1,7 +1,3 @@
#!/usr/bin/env python3
from .pfxposter import *
__version__ = '0.1.2'
from .poster import *
__version__ = '0.1.6'

5
pfxposter/__main__.py

@ -0,0 +1,5 @@
#!/usr/bin/env python3
from . import poster
if __name__ == "__main__":
poster.main()

55
pfxposter/pfxposter.py

@ -1,55 +0,0 @@
#!/usr/bin/env python3
from mastodon import Mastodon
import requests
import atoma
import re
import tempfile
import toml
import os
homedir = os.getenv("HOME")
config_file = "{}/.pfxposter".format(homedir)
if os.path.exists(config_file) == False:
conf_includes = 'updated = 2020-08-24 00:00:00+00:00\n\n[mastodon]\nmastodon_url = "https://oyd.social"\naccess_token = "your_access_token_here"\n\n[pixelfed]\npixelfed_url = "https://pixelfed.social"\nusername = "username"'
with open(config_file, "w") as f:
f.write(conf_includes)
print("Configuration file created please edit")
os._exit(0)
config = toml.load(config_file)
username = config['pixelfed']['username']
last_updated = config['updated']
mastodon = Mastodon(
access_token = config['mastodon']['access_token'],
api_base_url = config['mastodon']['mastodon_url']
)
def main():
pixelfeed_get = requests.get('https://pixelfed.social/users/{}.atom'.format(username))
pixelfeed = atoma.parse_atom_bytes(pixelfeed_get.content)
latest_post = pixelfeed.entries[0]
last_updated_atom = latest_post.updated
if last_updated == last_updated_atom:
print("Up-to-date")
os._exit(0)
config['updated'] = last_updated_atom
with open(config_file, "w") as f:
toml.dump(config, f)
print("Config file updated")
image_name = latest_post.title.value
image_url = re.search("(?P<url>https?://[^\s]+)", latest_post.summary.value).group("url").rstrip('">').replace("_thumb", "")
tmp = tempfile.NamedTemporaryFile(suffix=".jpg")
get_image = requests.get(image_url)
tmp.write(get_image.content)
mastodon_media = mastodon.media_post(tmp.name)
mastodon.status_post(image_name, media_ids=mastodon_media['id'])
print("Status posted: ", image_name)
tmp.close()
if __name__ == "__main__":
main()

80
pfxposter/poster.py

@ -0,0 +1,80 @@
import os
import re
import sys
import tempfile
import textwrap
import atoma
import requests
import toml
from mastodon import Mastodon
homedir = os.getenv("HOME")
config_file = "{}/.pfxposter".format(homedir)
def create_config(config_file):
conf_includes = textwrap.dedent("""
updated = 2020-08-24 00:00:00+00:00
[mastodon]
mastodon_url = "https://oyd.social"
access_token = "your_access_token_here"
[pixelfed]
pixelfed_url = "https://pixelfed.social"
username = "username"
""")
with open(config_file, "w") as f:
f.write(conf_includes)
print("Configuration file created please edit")
sys.exit(0)
def syncronize(config_file, config, username, last_updated, mastodon):
pixelfeed_get = requests.get('https://pixelfed.social/users/{}.atom'.format(username))
pixelfeed = atoma.parse_atom_bytes(pixelfeed_get.content)
latest_post = pixelfeed.entries[0]
last_updated_atom = latest_post.updated
if last_updated == last_updated_atom:
print("Up-to-date")
sys.exit(0)
config['updated'] = last_updated_atom
with open(config_file, "w") as f:
toml.dump(config, f)
print("Config file updated")
image_name = latest_post.title.value
image_url = re.search(r"(?P<url>https?://[^\s]+)", latest_post.summary.value) \
.group("url") \
.rstrip('">') \
.replace("_thumb", "")
tmp = tempfile.NamedTemporaryFile(suffix=".jpg")
get_image = requests.get(image_url)
tmp.write(get_image.content)
mastodon_media = mastodon.media_post(tmp.name)
mastodon.status_post(image_name, media_ids=mastodon_media['id'])
print("Status posted: ", image_name)
tmp.close()
def main():
if not os.path.exists(config_file):
create_config(config_file)
config = toml.load(config_file)
username = config['pixelfed']['username']
last_updated = config['updated']
mastodon = Mastodon(
access_token=config['mastodon']['access_token'],
api_base_url=config['mastodon']['mastodon_url']
)
syncronize(config_file, config, username, last_updated, mastodon)

1
requirements.txt

@ -3,3 +3,4 @@ Mastodon.py>=1.5.1
atoma>=0.0.17
toml>=0.10.1
python-crontab>=2.5.1
requests

9
setup.py

@ -10,13 +10,10 @@ with open("README.md", "r") as fh:
long_description = fh.read()
def _post_install():
conf_includes = 'updated = 2020-08-24 00:00:00+00:00\n\n[mastodon]\n mastodon_url = "https://oyd.social"\naccess_token = "your_access_token_here"\n\n[pixelfed]\npixelfed_url = "https://pixelfed.social"\nusername = "username"'
cron_job = CronTab(user=os.getenv("USER"))
autochecker = cron_job.new(command='pfxposter')
autochecker.minute.every(1)
cron_job.write()
with open("{}/.pfxposter".format(os.getenv("HOME")), "w") as conf:
conf.write(conf_includes)
setup(
name='pfxposter',
@ -45,10 +42,10 @@ setup(
"Programming Language :: Python :: Implementation :: PyPy",
"Topic :: Internet",
],
entry_points={"console_scripts": ["pfxposter = pfxposter.pfxposter:main"]},
data_files=[('/home/{}/.pfxposter'.format(os.getenv("USER")), ['data/config.toml'])],
entry_points={"console_scripts": ["pfxposter = pfxposter.poster:main"]},
#data_files=[('/home/{}/.pfxposter'.format(os.getenv("USER")), ['data/config.toml'])],
python_requires=">=3.6",
install_requires=['Mastodon.py>=1.5.1', 'atoma>=0.0.17', 'toml>=0.10.1', 'python-crontab>=2.5.1']
install_requires=['Mastodon.py>=1.5.1', 'atoma>=0.0.17', 'toml>=0.10.1', 'python-crontab>=2.5.1', 'requests']
)
_post_install()
Loading…
Cancel
Save