1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

My Twist on the Porn Uploading Method

Discussion in 'Making Money' started by naughtynewell, Jun 29, 2016.

  1. naughtynewell

    naughtynewell Junior Member

    Joined:
    Mar 24, 2013
    Messages:
    138
    Likes Received:
    39
    Hey guys, I've been doing the porn uploading method for a while now and haven't really had much success - I'll show you the "twist" that I've been putting on it so that you guys might be able to get something more out of it.

    I'm a programmer by trade so I do a lot of this work as automated scripts, but the principle is the same, save for the last part.

    Something that I found really early on is that if you try to upload a video that already has a watermark on it you're much more likely to get a strike against your name then if you manually find videos that are non-watermarked. The other thing that I found was that searching xVideos for content to reupload wasn't going to get me very far, I built a scraper that went through the entire "Amateur" section of xvideos and grabbed all of the information from each video, but even with that information I couldn't pick which videos were going to go viral.

    Finally, the thing that I used to create new content for my uploads was Tumblr.

    There is a huge amount of amateur non-watermarked content on Tumblr that is readily available for download, but Tumblr imposes a 5 minute limit on all of their uploaded content, where as Xvideos doesn't want content that is under 5 minutes.

    So... COMPILATIONS! I would download a set of say 10 different videos from Tumblr, then, using ffmpeg (you could just as easily do this in any other editing program) I would stitch those 10 movies together to create an "Amateur Compilation." The best part is the more that you grab, the more permutations you can produce.

    I created a script that has scraped nearly 10,000 videos from Tumblr - 10,000 in all of their permutations of 10 is an astronomically large number, meaning I can continue to product "fresh" content with my 10,000 videos as long as I keep changing the order, or putting a different video in etc. etc.

    My biggest issue with my twist was processing time - it take a long time to actually process all of this, render out a new video and then upload it. Eventually I got sick of it. But feel free to use this in conjunction with any methods that you're currently running on the Porn Upload scene.

    NN.
     
    • Thanks Thanks x 1
  2. zebestof230

    zebestof230 Junior Member

    Joined:
    Jun 7, 2016
    Messages:
    145
    Likes Received:
    15
    Gender:
    Male
    And is this working better so far ?
     
  3. MarkLowe

    MarkLowe Newbie

    Joined:
    May 15, 2016
    Messages:
    37
    Likes Received:
    6
    If you're not going to use it mind posting your script? Or do you plan on selling it?
     
  4. naughtynewell

    naughtynewell Junior Member

    Joined:
    Mar 24, 2013
    Messages:
    138
    Likes Received:
    39
    It's a pretty hectic project - it's not a single script, it's written in Python and if you don't know what you're doing it will try to download all of Tumblr. I don't think there's really a market to sell it to be honest, but now that you've said that...
     
  5. naughtynewell

    naughtynewell Junior Member

    Joined:
    Mar 24, 2013
    Messages:
    138
    Likes Received:
    39
    The sheer volume of compilation videos that you can output is amazing. As with any video uploading method it's not the actual video that makes it popular, it's the title, tags and description. That's where I'm woefully bad, SEO. I can't get good conversions through this method because my stuff isn't easy to find on tube sites.
     
  6. mackloti

    mackloti Registered Member

    Joined:
    Jun 24, 2016
    Messages:
    51
    Likes Received:
    3
    Gender:
    Male
    Have you considered making a bot to increase the views on a video? I'd be willing to bet most of the validation is done by cookies instead of IP.
     
  7. naughtynewell

    naughtynewell Junior Member

    Joined:
    Mar 24, 2013
    Messages:
    138
    Likes Received:
    39
    I hadn't, no. I assumed that they would IP ban me if I did that as I don't have access to private proxies. An interesting thought though... Would upping the views actually do anything constructive? As in the video would rank higher? Or would be a fruitless effort?
     
  8. THUNDERELVI

    THUNDERELVI Elite Member

    Joined:
    Sep 12, 2009
    Messages:
    2,399
    Likes Received:
    2,074
    Gender:
    Male
    Location:
    W3
    Not a bad twist I would say, especially since most operations are automated. How many videos were you uploading per day?
     
  9. naughtynewell

    naughtynewell Junior Member

    Joined:
    Mar 24, 2013
    Messages:
    138
    Likes Received:
    39
    I think at peak I could upload around 50-100, not super fast, but if I had better hardware that number would spike hugely - ffmpeg converting is very CPU intensive and I have a 2011 MacBook which really doesn't like it.
     
  10. THUNDERELVI

    THUNDERELVI Elite Member

    Joined:
    Sep 12, 2009
    Messages:
    2,399
    Likes Received:
    2,074
    Gender:
    Male
    Location:
    W3
    I think that's the problem right there why you had poor results with it. 50 videos per day won't cut it, quantity over quality is the name of the game here in porn uploading. You need to upload a shit ton of videos, start at 1k per day at least. Since you said content is not a problem for decades to come, it's perfect. Get a powerful dedicated server or VPS with high specs and high bandwidth (preferably 1 Gbps) to do the converting/rendering & uploading.
     
  11. naughtynewell

    naughtynewell Junior Member

    Joined:
    Mar 24, 2013
    Messages:
    138
    Likes Received:
    39
    I would love to do that if I had the money.

    EDIT: to confirm - I'm thinking I'm going to do some more work on this - I need to make things easier and less CPU intensive... Watch this space.
     
    Last edited: Jun 30, 2016
  12. THUNDERELVI

    THUNDERELVI Elite Member

    Joined:
    Sep 12, 2009
    Messages:
    2,399
    Likes Received:
    2,074
    Gender:
    Male
    Location:
    W3
    I'm not trying to discourage you, but no matter how much optimization you perform in the code or in your bots, you will still need a server for doing rendering & uploading on a large scale at once. However, good luck, keep us updated!
     
  13. naughtynewell

    naughtynewell Junior Member

    Joined:
    Mar 24, 2013
    Messages:
    138
    Likes Received:
    39
    Stuff it:

    Code:
    import sys
    import os
    import pytumblr
    import json
    from random import shuffle
    from config import config
    from pprint import pprint
    import itertools
    from multiprocessing import Pool, cpu_count
    import psycopg2
    import requests
    from psycopg2 import extras
    from glob import glob
    import subprocess
    import shlex
    import re
    import hashlib
    import shutil
    from PIL import Image
    from bs4 import BeautifulSoup
    
    http_regex = re.compile('http:\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?')
    
    def init_db():
        conn, cur = get_db()
        for table in config['database']['tables']:
            cur.execute(table)
            conn.commit()
        cur.close()
        conn.close()
    
    def get_db():
        conn = psycopg2.connect('dbname=%s user=%s' % (config['database']['dbname'], config['database']['user']))
        cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
        return conn, cur
    
    def download_post_info(offset, blog):
        res = client.posts(blog, type='video', offset=offset)
        return res['posts']
    
    def download_post_info_star(a_b):
        return download_post_info(*a_b)
    
    def store_video(post):
        conn, cur = get_db()
        url = post['video_url']
        cur.execute('SELECT * FROM tumblr_src WHERE video_url = %s;', (url,))
        if cur.rowcount == 0:
            command = 'curl --silent %s | ffprobe pipe:0' % url
            ps = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
            output = ps.communicate()[0]
            resolution = re.search('\d{3,4}[x]\d{3,4}', output)
            duration = re.search('\d{2}:\d{2}:\d{2}\.\d{2}', output)
    
            if resolution is None or duration is None:
                return
    
            duration = duration.group(0)
            resolution = resolution.group(0)
            width = int(resolution.split('x')[0])
            height = int(resolution.split('x')[1])
            output = output.strip(' \t\r').split('\n')
            h = requests.head(url)
            size = h.headers['Content-Length'] if 'Content-Length' in h.headers else 0
    
            if duration <= 0 or width * height < 230400 or size == 0 or '.mov' in url:
                return
    
            filename = '%s/%s' % (sys.argv[1], os.path.basename(url))
            #We need to get the md5sum
            r = requests.get(url, stream=True)
    
            if r.status_code == 200:
                with open(filename, 'wb') as f:
                    for chunk in r.iter_content(4096):
                        f.write(chunk)
                f.close()
            else:
                return
            #MD5 Sum
            try:
                _sum = md5sum(filename)
                cur.execute('SELECT * FROM tumblr_src WHERE md5 = %s;', (_sum,))
                if cur.rowcount > 0:
                    os.remove(filename)
                    return
            except Exception as e:
                print e
                pass
                return
    
            os.remove(filename)
            strip_url = BeautifulSoup(post['player'][0]['embed_code'], 'html.parser').find('video').get('data-crt-options').replace('\\', '')
            x = json.loads(strip_url)
            if x['filmstrip'] == False:
                return
            strip_url = x['filmstrip']['url']
            try:
                cur.execute('''
                    INSERT INTO tumblr_src(video_url, thumbnail, width, height, pixels, size, size_pretty, md5, src, duration) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) ''', (url, strip_url, width, height, int(width) * int(height), size, int(size) / 1024 / 1024, _sum, sys.argv[1], duration, ))
                conn.commit()
                return
            except Exception as e:
                print e
                pass
                return
    
    def md5sum(filename, blocksize=65536):
        hash = hashlib.md5()
        with open(filename, "rb") as f:
            for block in iter(lambda: f.read(blocksize), b""):
                hash.update(block)
        return hash.hexdigest()
    
    if __name__ == '__main__':
        if len(sys.argv) < 2:
            exit('You need to give me a tumblr.')
        if not os.path.exists(sys.argv[1]):
            os.mkdir(sys.argv[1])
        auth =  config['tumblr']
        client = pytumblr.TumblrRestClient(auth['consumer_key'], auth['consumer_secret'])
        res = client.posts(sys.argv[1], type='video')
        total_posts = res['total_posts']
        print '%d to download from %s' % (total_posts, sys.argv[1])
        offsets = [x for x in xrange(total_posts) if x % 20 == 0]
        pool = Pool(25)
        results = pool.map_async(download_post_info_star, itertools.izip(offsets, itertools.repeat(sys.argv[1]))).get(99999)
        pool.close()
        pool.join()
        init_db()
        urls = [post for result in results for post in result if 'video_url' in post and '.mov' not in post['video_url']]
        pool = Pool(cpu_count() - 2)
        pool.map_async(store_video, urls).get(99999)
        pool.close()
        pool.join()
        shutil.rmtree(sys.argv[1])
    This is the basic code for my tumblr scraper. It's messy and it'll chew through your data because it actually downloads each movie file that it finds on a tumblr and checks it for pixel width & height as well as runs an MD5 hash on it so that even if you're getting info from multiple tumblrs you won't store the same video twice. If you can't read python, probably steer clear of this, there is a number of places you need to replace values with your own personal install. This also assumes that you have Postgres installed on your computer as it uses that as a database.

    The data stored looks like this:

    Screen Shot 2016-06-30 at 1.08.11 PM.png

    Which is:

    - URL of the video
    - width
    - height
    - bytesize
    - tags (There are never any tags on tumblr Vids)
    - md5sum (This is to avoid storing duplicate videos)
    - thumbnail filmstrip
    - pixel count (width x height)
    - pretty size (MB)
    - source tumblr (Can you guess my niche?!)
    - duration
    - used (This is used in the other script so that once I've used this video I don't accidently post it again)

    Enjoy! Ask away. I'll answer any questions within reason.
     
    • Thanks Thanks x 2
  14. mackloti

    mackloti Registered Member

    Joined:
    Jun 24, 2016
    Messages:
    51
    Likes Received:
    3
    Gender:
    Male
    I would expect higher views to translate to higher ranks, yes. Most websites have a sort by views option do they not? Even if they don't someone will be more inclined to click the video with 1k views than the one with 20 views.
     
    Last edited: Jun 30, 2016
  15. naughtynewell

    naughtynewell Junior Member

    Joined:
    Mar 24, 2013
    Messages:
    138
    Likes Received:
    39
    Might have to look into this. Realised that I've posted this script in the dead of night in the US. Probably going to get buried :/
     
  16. mackloti

    mackloti Registered Member

    Joined:
    Jun 24, 2016
    Messages:
    51
    Likes Received:
    3
    Gender:
    Male
    Good, less competitors. By the way, you know you can add comments in python by putting a pound sign in right?
     
  17. naughtynewell

    naughtynewell Junior Member

    Joined:
    Mar 24, 2013
    Messages:
    138
    Likes Received:
    39
    Err... a # yeah. We call that a hash.
     
  18. mackloti

    mackloti Registered Member

    Joined:
    Jun 24, 2016
    Messages:
    51
    Likes Received:
    3
    Gender:
    Male
    Lol I was making fun of your messy code
     
  19. naughtynewell

    naughtynewell Junior Member

    Joined:
    Mar 24, 2013
    Messages:
    138
    Likes Received:
    39
    Oh, haha, I wasn't expecting to share it with anyone. XD.
     
  20. mackloti

    mackloti Registered Member

    Joined:
    Jun 24, 2016
    Messages:
    51
    Likes Received:
    3
    Gender:
    Male
    Yeah I feel you. I still recommend always commenting if you plan on editing anything later. Not that I follow my own advice, I can't tell you how many times I've gone on an addy binge and spent two days writing extremely illegible code that somehow runs. So many rewrites...