ios 在文字里加图片

interface NSMutableAttributedString(CustomImage)

/**
在尾部添加图片附件

@param image 图片
@param point x水平偏移,但是排版位置不变,向后移动,会被截断,所以推荐使用空格实现水平偏移。
y为垂直偏移,正为向上,负为向下
*/
- (void)appendImageAttachment:(UIImage *)image offset:(CGPoint)point;

@end

@implementation NSMutableAttributedString(CustomImage)

- (void)appendImageAttachment:(UIImage *)image offset:(CGPoint)point;
{
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = image;
attachment.bounds = CGRectMake(point.x, point.y, attachment.image.size.width, attachment.image.size.height);

NSAttributedString *attach = [NSAttributedString attributedStringWithAttachment:attachment];
[self appendAttributedString:attach];
}

@end

无限的CABasicAnimation 在页面消失后再返回后被暂停

https://stackoverflow.com/questions/13501133/infinite-cabasicanimation-stops

Actually there is a simple way to solve this
setting your animation to this

animation.removedOnCompletion = false

and the layer itself isn’t destroyed when NavigationController pushed another ViewController’s view, because UINavigationController got viewControllers property which will retain the original viewController and therefore its view and your animated layer. It is this CABasicAnimation object destroyed when view removed from interface even though you set its repeatCount to infinite. So set the removedOnCompletion to false to keep it

抓取并推送厦大经济学院招生新闻更新

简单 Python 代码

import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient

# mail
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart

database = "mongodb://10.211.55.5:27017"
client = MongoClient(database)
db = client.xmunv


def get_list():
    r = requests.session()
    html = r.get('http://economic.xmu.edu.cn/info/enrollment/').text
    soap = BeautifulSoup(html, "html.parser")
    container = soap.find(class_='module paged_list')
    news = container.findAll("li")
    return news


def print_list(news):
    for each in news:
        print(each.text.strip())
        print("http://economic.xmu.edu.cn%s" % each.a.get('href'))


def lookup_database(news):
    for each in news:
        title = each.text.strip()
        url = "http://economic.xmu.edu.cn%s" % each.a.get('href')

        if db.news.find_one({"title": title}) is None:
            db.news.insert_one({"title": title})
            push(title, url)


def push(title, url):
    text = """

    <h2>%s</h2><br>
    <a href="%s" >%s</a>

    """ % (title, url, url)
    print("pushing", title)
    send_mail(text)


def send_mail(data):
    sender = '*********@163.com'
    smtp_server = 'smtp.163.com'
    username = sender
    password = '*********'
    smtp = smtplib.SMTP()
    smtp.connect(smtp_server)
    smtp.login(username, password)

    receiver = ['chych123@foxmail.com']
    subject = '厦大经济学院新闻更新'
    msg = MIMEMultipart('alternative')
    part = MIMEText(data, 'html', 'utf-8')
    msg['Subject'] = Header(subject, 'utf-8')
    msg['from'] = sender
    msg.attach(part)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()


lookup_database(get_list())