Auto create csdn post

12 篇文章 0 订阅

1. Problem

I want to create a script to put native blog file to csdn site.

2. Analysis

  1. Try to use csdn api, but meet error. I can not get access_token.
  2. Use selenium.

3. Requirement

  1. PyUserInput
  2. selenium
  3. pyperclip
  4. geckodriver
git clone https://github.com/PyUserInput/PyUserInput
cd PyUserInput
sudo python setup.py install
sudo pip install selenium
sudo pip install pyperclip
wget https://github.com/mozilla/geckodriver/releases/download/v0.14.0/geckodriver-v0.14.0-linux64.tar.gz
tar -zxvf geckodriver-v0.14.0-linux64.tar.gz
sudo mv geckodriver /usr/local/bin/

4. Code

write.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from pymouse import PyMouse
from pykeyboard import PyKeyboard
import pyperclip
import time

m = PyMouse()
k = PyKeyboard()

def writeContent(title, content):
    m.click(300, 180, 1, 3)
    time.sleep(1)
    k.type_string(title)

    m.click(300, 300, 1, 2)
    time.sleep(1)
    k.press_key(k.alt_key)
    k.tap_key('a')
    k.release_key(k.alt_key)
    k.tap_key(k.delete_key)

    #k.type_string(content)
    pyperclip.copy(content)
    m.click(300, 300, 1, 2)
    time.sleep(0.5)
    k.press_key(k.control_key)
    k.tap_key('v')
    k.release_key(k.control_key)


def writeAbstract(abstract):
    m.click(m.screen_size()[0]/2, m.screen_size()[1]/2, 1, 3)
    time.sleep(1)
    k.press_key(k.alt_key)
    k.tap_key('a')
    k.release_key(k.alt_key)
    k.tap_key('space')

    k.type_string(abstract)

def addSetting(groups):
    assert len(groups) < 5 and len(groups) > 0

    # set 原创 
    pos = [621, 346]
    m.click(pos[0], pos[1], 1, 3)
    time.sleep(1)

    pos = [621, 411]
    m.click(pos[0], pos[1], 1, 1)
    time.sleep(1)

    # set article type
    pos = [621, 390]
    m.click(pos[0], pos[1], 1, 2)
    time.sleep(0.5)
    for g in groups:
        k.type_string(g)
        k.tap_key(k.enter_key)
    time.sleep(1)

    # set 综合
    pos = [621, 674]
    m.click(pos[0], pos[1], 1, 1)
    time.sleep(1)

    pos = [621, 640]
    m.click(pos[0], pos[1], 1, 1)
    time.sleep(1)


if __name__ == "__main__":
    #title="hello, csdn"
    #content="test"
    #writeContent(title, content)

    addSetting(['linux','apple'])

addPost.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from selenium import webdriver
import time
import write
import sys

def pause(length=1):
    time.sleep(length)

def addPost(title, content, abstract, groups):
    b = webdriver.Firefox()
    pause(1)

    b.get("http://blog.csdn.net/duinodu")
    pause(2)

    b.find_element_by_link_text('登录').click()
    pause(5)

    b.find_element_by_id('username').send_keys('username')
    pause(1)

    b.find_element_by_id('password').send_keys('password')
    pause(1)

    b.find_element_by_class_name('logging').click()
    pause(5)

    b.find_element_by_link_text('写新文章').click()
    pause(5)

    write.writeContent(title, content)
    b.find_element_by_link_text('发表博客').click()
    pause(3)

    write.writeAbstract(abstract)
    b.find_element_by_link_text('下一步').click()
    pause(3)

    write.addSetting(groups)
    b.find_element_by_link_text('发布').click()
    pause(3)

def readBlog(filename):
    with open(filename, 'r') as fid:
        lines = fid.readlines()
        title = lines[0].split('\n')[0]
        groups = lines[1].split('\n')[0].split(' ')
        abstract = lines[2].split('\n')[0]
        content = ""
        for line in lines[4:]:
            content += line
        return title, groups, abstract,  content

def main(argv):
    assert(len(argv) == 2)
    title, groups, abstract,  content = readBlog(argv[1])
    #print content
    addPost(title, content, abstract, groups)

if __name__ == "__main__":
    print(__doc__)
    import sys
    main(sys.argv)

5. Usage

python addPost.py newblog.md

P.S: This post is created by addPost.py automatically.

newblog.md

New blog (title)
linux vim (type)
It is a blog (abstraction)

LaLaLa...(Content)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值