All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mxixm.fastboot.weixin.module.media.WxMedia Maven / Gradle / Ivy

The newest version!
package com.mxixm.fastboot.weixin.module.media;

import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.mxixm.fastboot.weixin.module.message.adapters.WxJsonAdapters;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.Serializable;
import java.lang.invoke.MethodHandles;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

/**
 * FastBootWeixin  WxMedia
 * 虽然叫素材,但是要和media区分好
 *
 * @author Guangshan
 * @summary FastBootWeixin  WxMedia
 * @Copyright (c) 2017, Guangshan Group All Rights Reserved
 * @since 2017/8/12 21:05
 */
@AllArgsConstructor
@NoArgsConstructor
@Data
public class WxMedia {

    private static final Log logger = LogFactory.getLog(MethodHandles.lookup().lookupClass());

    public enum Type {
        @JsonProperty("image")
        IMAGE,
        @JsonProperty("voice")
        VOICE,
        @JsonProperty("video")
        VIDEO,
        @JsonProperty("thumb")
        THUMB;
    }

    @JsonProperty("media_id")
    private String mediaId;

    /**
     * 静态工厂方法
     *
     * @param mediaId
     * @return dummy
     */
    public static WxMedia of(String mediaId) {
        return new WxMedia(mediaId);
    }

    /**
     * 标记是result
     */
    public interface Result {

        /**
         * 获取关键信息
         *
         * @return dummy
         */
        String keyInfo();

    }

    /**
     * 上传临时素材的响应
     */
    @Data
    @NoArgsConstructor
    public static class TempMediaResult implements Result {

        @JsonProperty("type")
        private Type type;

        @JsonProperty("media_id")
        private String mediaId;

        @JsonDeserialize(converter = WxJsonAdapters.WxIntDateConverter.class)
        @JsonProperty("created_at")
        private Date createdAt;

        @Override
        public String keyInfo() {
            return this.mediaId;
        }
    }

    /**
     * 上传永久素材的接口
     */
    @Data
    public static class MediaResult implements Result {

        @JsonProperty("url")
        private String url;

        @JsonProperty("media_id")
        private String mediaId;

        @Override
        public String keyInfo() {
            if (url != null) {
                return url;
            } else {
                return mediaId;
            }
        }
    }

    /**
     * 上传图片的结果
     */
    @Data
    public static class ImageResult implements Result {

        @JsonProperty("url")
        private String url;

        @Override
        public String keyInfo() {
            return this.url;
        }
    }

    /**
     * 上传图文消息的结果
     */
    @Data
    public static class NewsResult implements Result {

        @JsonProperty("media_id")
        private String mediaId;

        @Override
        public String keyInfo() {
            return this.mediaId;
        }

    }

    @Data
    @NoArgsConstructor
    public static class Video implements Serializable {

        @JsonProperty("title")
        private String title;

        @JsonProperty("introduction")
        private String introduction;

        @JsonProperty("down_url")
        private String downUrl;

        Video(String title, String introduction) {
            this.title = title;
            this.introduction = introduction;
        }

        public static Builder builder() {
            return new Builder();
        }

        public static class Builder {
            private String title;
            private String introduction;

            Builder() {
            }

            public Builder title(String title) {
                this.title = title;
                return this;
            }

            public Builder introduction(String introduction) {
                this.introduction = introduction;
                return this;
            }

            public Video build() {
                return new Video(title, introduction);
            }

            public String toString() {
                return "com.example.myproject.module.media.WxMedia.Video.Builder(title=" + this.title + ", introduction=" + this.introduction + ")";
            }
        }
    }

    /**
     * 新增和获取图文素材的实体,因为转为json提交给微信时的key为articles
     * 从微信获取的key为news_item,故写了setter和getter
     */
    public static class News {

        @JsonIgnore
        private List
articles; News(List
articles) { this.articles = articles; } public static Builder builder() { return new Builder(); } //@JsonProperty("articles") @JsonGetter("articles") public List
getArticles() { return articles; } @JsonSetter("news_item") public void setArticles(List
articles) { this.articles = articles; } public static class Builder { private LinkedList
articles; private Article lastArticle; Builder() { articles = new LinkedList<>(); } public Builder firstArticle(String title, String thumbMediaId, boolean showCoverPic, String content, String contentSourceUrl, String author, String digest) { this.articles.addFirst(new Article(title, thumbMediaId, showCoverPic, content, contentSourceUrl, author, digest)); return this; } public Builder firstArticle(Article item) { this.articles.addFirst(item); return this; } public Builder addArticle(String title, String thumbMediaId, boolean showCoverPic, String content, String contentSourceUrl, String author, String digest) { this.articles.addLast(new Article(title, thumbMediaId, showCoverPic, content, contentSourceUrl, author, digest)); return this; } public Builder addArticle(Article item) { this.articles.addLast(item); return this; } public Builder addArticles(Collection
item) { this.articles.addAll(item); return this; } public Builder lastArticle(Article article) { this.lastArticle = article; return this; } // 这里关于最后项目的判断应该能优化一下,今天太累了,明天改2017年8月7日00:18:52 public News build() { // 这里可能不是一个好的代码习惯,可能会造成items变量名混乱。 List
items = this.articles; if (this.articles.size() > 7) { if (this.lastArticle != null) { logger.warn("图文消息至多只能有八条,最后的图文消息将被忽略"); items = this.articles.subList(0, 7); items.add(this.lastArticle); } else if (this.articles.size() > 8) { logger.warn("图文消息至多只能有八条,最后的图文消息将被忽略"); items = this.articles.subList(0, 8); } } else if (this.lastArticle != null) { items.add(this.lastArticle); } return new News(items); } public String toString() { return "com.example.myproject.module.media.WxMedia.News.Builder(articles=" + this.articles + ")"; } } } /** * 更新图文消息的实体,单条new */ @Data public static class New { /** * 要修改的图文消息的id */ @JsonProperty("media_id") private String mediaId; /** * 要修改的索引 */ @JsonProperty("index") private Integer index; /** * 修改成什么 */ @JsonProperty("articles") private Article article; New(String mediaId, Integer index, Article article) { this.mediaId = mediaId; this.index = index; this.article = article; } public static Builder builder() { return new Builder(); } public static class Builder { private String mediaId; private Integer index; private Article article; Builder() { } public Builder mediaId(String mediaId) { this.mediaId = mediaId; return this; } public Builder index(Integer index) { this.index = index; return this; } public Builder article(Article article) { this.article = article; return this; } public New build() { return new New(mediaId, index, article); } public String toString() { return "com.example.myproject.module.media.WxMedia.New.Builder(mediaId=" + this.mediaId + ", index=" + this.index + ", article=" + this.article + ")"; } } } /** * 图文消息的article */ @Data @NoArgsConstructor @JsonInclude(JsonInclude.Include.NON_NULL) public static class Article { /** * 是 标题 */ @JsonProperty("title") private String title; /** * 是 图文消息的封面图片素材id(必须是永久mediaID) */ @JsonProperty("thumb_media_id") private String thumbMediaId; /** * 是 是否显示封面,0为false,即不显示,1为true,即显示 */ @JsonProperty("show_cover_pic") @JsonSerialize(converter = WxJsonAdapters.WxBooleanIntConverter.class) private boolean showCoverPic; /** * 是 图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS,涉及图 * 片url必须来源"上传图文消息内的图片获取URL"接口获取。外部图片url将被过滤。 */ @JsonProperty("content") private String content; /** * 是 图文消息的原文地址,即点击“阅读原文”后的URL */ @JsonProperty("content_source_url") private String contentSourceUrl; /** * 否 作者 */ @JsonProperty("author") private String author; /** * 否 图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空。如果本字段为没有填写,则默认抓取正文前64个字。 */ @JsonProperty("digest") private String digest; /** * 否 图文页的URL */ @JsonProperty("url") private String url; Article(String title, String thumbMediaId, boolean showCoverPic, String content, String contentSourceUrl, String author, String digest) { this.title = title; this.thumbMediaId = thumbMediaId; this.showCoverPic = showCoverPic; this.content = content; this.contentSourceUrl = contentSourceUrl; this.digest = digest; this.author = author; } public static Builder builder() { return new Builder(); } public static class Builder { private String title; private String thumbMediaId; private String author; private String digest; private boolean showCoverPic; private String content; private String contentSourceUrl; Builder() { } public Builder title(String title) { this.title = title; return this; } public Builder thumbMediaId(String thumbMediaId) { this.thumbMediaId = thumbMediaId; return this; } public Builder author(String author) { this.author = author; return this; } public Builder digest(String digest) { this.digest = digest; return this; } public Builder showCoverPic(boolean showCoverPic) { this.showCoverPic = showCoverPic; return this; } public Builder content(String content) { this.content = content; return this; } // url只是返回结果中的东西 // public Builder url(String url) { // this.url = url; // return this; // } public Builder contentSourceUrl(String contentSourceUrl) { this.contentSourceUrl = contentSourceUrl; return this; } public Article build() { return new Article(title, thumbMediaId, showCoverPic, content, contentSourceUrl, author, digest); } public String toString() { return "com.example.myproject.module.media.WxMedia.Article.Builder(title=" + this.title + ", thumbMediaId=" + this.thumbMediaId + ", author=" + this.author + ", digest=" + this.digest + ", showCoverPic=" + this.showCoverPic + ", content=" + this.content + ", contentSourceUrl=" + this.contentSourceUrl + ")"; } } } public static class Count { @JsonProperty("voice_count") private int voice; @JsonProperty("video_count") private int video; @JsonProperty("image_count") private int image; @JsonProperty("news_count") private int news; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy